diff --git a/core/utils/cakey.go b/core/utils/cakey.go new file mode 100644 index 0000000..25d94e4 --- /dev/null +++ b/core/utils/cakey.go @@ -0,0 +1,34 @@ +package utils + +import ( + "crypto" + "crypto/rsa" + "crypto/sha256" + "crypto/x509" + "encoding/pem" + "fmt" +) + +// 解析PKCS1公钥 +// https://uutool.cn/rsa-generate/ +func ParsePKCS1PublicKey(publicKeyPEM string) (*rsa.PublicKey, error) { + block, _ := pem.Decode([]byte(publicKeyPEM)) + if block == nil { + return nil, fmt.Errorf("无效的公钥 -----BEGIN RSA PUBLIC KEY----- 编码") + } + + pubKey, err := x509.ParsePKCS1PublicKey(block.Bytes) + if err != nil { + return nil, err + } + + return pubKey, nil +} + +// 验证签名 +func VerifySignature(publicKey *rsa.PublicKey, data, signature []byte) bool { + hashed := sha256.Sum256(data) + err := rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hashed[:], signature) + + return err == nil +}