提示:
golang VerifyPKCS1v15 crypto/rsa: input must be hashed message
问题描述:
rsa.VerifyPKCS1v15解码出现:crypto/rsa: input must be hashed message
错因:
类型不一致
解决方案:
类型一致即可
附录
记录完整RASWITHMD5(加密、解密)
const (
//商户私钥
RsaPrivateKey = `xxx`
//商户公钥
RsaPublickey = `xxx`
//第三方--公钥
RsaLlkPublickey = `xxx`
)
func Rsasign(origData string) (sign []byte,err error) {
//加密
hashMd5 := md5.Sum([]byte(origData))
hashed := hashMd5[:]
privateKeyString,err := base64.StdEncoding.DecodeString(RsaPrivateKey)
if err != nil {
return
}
privateKey, err := x509.ParsePKCS8PrivateKey(privateKeyString)
if err != nil {
return
}
signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey.(*rsa.PrivateKey), crypto.MD5, hashed)
return []byte(base64.StdEncoding.EncodeToString(signature)),err
}
/********************************************************************************/
/**RSA验签
* $data待签名数据(需要先排序,然后拼接)
* $sign需要验签的签名,需要base64_decode解码
* 验签用支付公钥
* return 验签是否通过 bool值
*/
func RsaVerify(originalData, signData string) bool{
sign, err := base64.StdEncoding.DecodeString(signData)
if err != nil {
return false
}
publicKey, _ := base64.StdEncoding.DecodeString(RsaPublickey)//RsaLlkPublickey RsaPublickey
pub, err := x509.ParsePKIXPublicKey(publicKey)
if err != nil {
return false
}
hash := md5.New()
hash.Write([]byte(originalData))
err = rsa.VerifyPKCS1v15(pub.(*rsa.PublicKey), crypto.MD5, hash.Sum(nil), sign)
if err!=nil{
return false
}
return true
}