49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"crypto"
|
|
"crypto/rand"
|
|
"crypto/rsa"
|
|
"crypto/sha512"
|
|
"crypto/x509"
|
|
"encoding/pem"
|
|
)
|
|
|
|
// SignatureRSA rsa私钥签名
|
|
func SignatureRSA(plainText []byte, rsaPrivateKey string) (signed []byte, err error) {
|
|
// 使用pem对读取的内容解码得到block
|
|
block, _ := pem.Decode([]byte(rsaPrivateKey))
|
|
//x509将数据解析得到私钥结构体
|
|
privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
// 创建一个hash对象
|
|
h := sha512.New()
|
|
_, _ = h.Write(plainText)
|
|
// 计算hash值
|
|
hashText := h.Sum(nil)
|
|
// 使用rsa函数对散列值签名
|
|
signed, err = rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA512, hashText)
|
|
if err != nil {
|
|
return
|
|
}
|
|
return signed, nil
|
|
}
|
|
|
|
// VerifyRSA rsa签名认证
|
|
func VerifyRSA(plainText, signText []byte, rsaPublicKey string) bool {
|
|
// pem解码得到block
|
|
block, _ := pem.Decode([]byte(rsaPublicKey))
|
|
// x509解析得到接口
|
|
publicKey, err := x509.ParsePKCS1PublicKey(block.Bytes)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
// 对原始明文进行hash运算得到散列值
|
|
hashText := sha512.Sum512(plainText)
|
|
// 签名认证
|
|
err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA512, hashText[:], signText)
|
|
return err == nil
|
|
}
|