如何验证使用PKCS8私钥签名的签名?

问题描述 投票:0回答:1

我正在使用Go语言开发一个用于验证签名的程序。

它接收参数(公钥,签名,明文),签名由PKCS#8中用户的私钥签名。

我试图在x509包中使用VerifyPKCS1v15函数,但它对我不起作用。我想这可能是因为该函数面向pkcs1私钥所做的签名。

有谁能够帮我?我想知道是否有任何方法可以使用pkcs8公钥验证签名?

这是我的代码

FUNC主(){风险纯测试= “P0000000025300000100000000001000026720180705140842” 是hashVal = “15b47c1d79b0be2aae36a05bcd8644af7bfe3dd4e0c23e2b78692fc900998fca” 是signatureStr = “WWFCZsD3BhakkCaLAcTPxMvd3Pom1Glhgcc + xhR7tIDBLvkVk / LtxV + 2nHw6b9u0Dcla8U4vUR7KH8zpUS7fNJD9yPDDWxH5PYiw4jQTjziiLHSUpuaGbf8N1Y2jKPXvzq1ZFaEAqCirLSmt5KyD3gQ22ysHgYA2vH44zzBApcxYXVbzLbCIGAR5aL / mvYt7uWsh4FX8dQ49v9SqIm / rRBGEbsscF4HpQApy8VqRGvq6EbwrPCfMcpwIbBHdDUR0mneaNg9GH4hozfMC08SZtAMGDk8J / NQway1FisrjpUeZfMe / hANDH1LmfrbThKDgB7WIpDryCXMTsBKjrqyArQ ==” 是pubKeyStr =“MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA17hWIujBfiqrd4o0JCEn6N1mzv94VM9LiVHoldvPRDEwCXbeoSebzZElvhkJsPl08o68g1BgRC4LpaGQDcVzwyFMs4DnXEDLapZQpTzkmXaSIYIRYER / U1OgdW5Cq2do / eTrylWdloqWuz5JL2vIr4GFycnEduYVSzFmAqucCvgGEFUxwFxtZ95BVsxfKOt7eFCJWoS0iR2 / If5EMG9F6KG6DtDUWg6awN2mIbhm8fqxSF48ehCkPCN4s4YkcUlkmGYEetdBCxbaUh9 / S960XjQBK3MXbLIJLgRLoEAdWJ2v6IjaEsw7dQAaMti3QOPr0x7TyHlS7rz / lyjlJjaXEQIDAQAB“

publicKeyBase64, err := base64.StdEncoding.DecodeString(pubKeyStr)
if err != nil {
    fmt.Println("base64 error : " + err.Error())
}
fmt.Println("publicKeyBase64: ")
fmt.Println(string(publicKeyBase64))

pub, err := x509.ParsePKIXPublicKey(publicKeyBase64)
if err != nil {
    fmt.Println("failed to parse DER encoded public key: " + err.Error())
}

switch pub := pub.(type) {
case *rsa.PublicKey:
    fmt.Println("pub is of type RSA:", pub)
case *dsa.PublicKey:
    fmt.Println("pub is of type DSA:", pub)
case *ecdsa.PublicKey:
    fmt.Println("pub is of type ECDSA:", pub)
default:
    panic("unknown type of public key")
}

publicKey, isRSAPublicKey := pub.(*rsa.PublicKey)
if !isRSAPublicKey {
    fmt.Println("Public key parsed is not an RSA public key")
}

signatureBytes, _ := hex.DecodeString(signatureStr)
fmt.Println("signatureBytes : " + string(signatureBytes))

validateBytes := sha256.Sum256([]byte(plainTest))
fmt.Println("validateBytes : " + string(validateBytes[:]))

err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, validateBytes[:], signatureBytes)
if err != nil {
    fmt.Printf("err: %v\n", err)
} else {
    fmt.Printf("ok")
}

}

public-key pkcs#8
1个回答
0
投票

我遇到了同样的问题,事实证明我的publicKey是错误的。我的意思不是格式,但密钥不与私钥配对。我改为另一对密钥,代码工作。

© www.soinside.com 2019 - 2024. All rights reserved.