func main() {
// 生成公钥密码的密钥对
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
panic(err)
}
publicKey := privateKey.PublicKey
// 待签名消息
msg := []byte("I love go programming language!!")
// 计算摘要
digest := sha256.Sum256(msg)
// 用私钥签名
sign, err := rsa.SignPSS(rand.Reader, privateKey, crypto.SHA256, digest[:], nil)
if err != nil {
panic(err)
}
fmt.Printf("签名:%s\\n", fmt.Sprintf("%x", sign))
// 用公钥验证签名
err = rsa.VerifyPSS(&publicKey, crypto.SHA256, digest[:], sign, nil)
if err != nil {
panic(err)
}
fmt.Printf("签名验证成功!\\n")
}