From efd3ff69a125f1c980938841958b4e6f1ca34942 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 23 Aug 2023 17:21:50 +0800 Subject: [PATCH] =?UTF-8?q?ca=E7=99=BB=E5=BD=95=E8=AE=A4=E8=AF=81=E5=85=AC?= =?UTF-8?q?=E9=92=A5=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/utils/cakey.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 core/utils/cakey.go 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 +}