go rsa 说明
https://blog.youkuaiyun.com/xz_studying/article/details/80314111
私钥有两种格式,要用不同函数来解析:
- ParsePKCS1PrivateKey
- ParsePKCS8PrivateKey
有 加密解密,签名验证两个套路:
- 加密解密:公钥加密,私钥解密
- 签名验证:私钥签名,公钥验证
google play receipt 验证的go实现
我的gist:https://gist.github.com/harryhare/6ff18e0c2dc0e6d6452c45e31b201568
别人的实现:
https://blog.youkuaiyun.com/Wen_dy/article/details/79866193
func VerifyGoogleSign(data, sign, publicKey string) (bool, error) {
decodePublic, err := base64.StdEncoding.DecodeString(publicKey)
if err != nil {
return false, err
}
pubInterface, err := x509.ParsePKIXPublicKey(decodePublic)
if err != nil {
return false, err
}
pub := pubInterface.(*rsa.PublicKey)
decodeSign, err := base64.StdEncoding.DecodeString(sign)
if err != nil {
return false, err
}
sh1 := sha1.New()
sh1.Write([]byte(data))
hashData := sh1.Sum(nil)
result := rsa.VerifyPKCS1v15(pub, crypto.SHA1, hashData, decodeSign)
if result != nil {
return false, err
}
return true, nil
}