登录
首页 >  Golang >  Go问答

无法在 encryptPKCS1v15 函数中使用函数 x509.ParsePKCS8PrivateKey 解析 RSA private key

来源:stackoverflow

时间:2024-02-07 18:03:24 389浏览 收藏

今天golang学习网给大家带来了《无法在 encryptPKCS1v15 函数中使用函数 x509.ParsePKCS8PrivateKey 解析 RSA private key》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

const strprivatekey = "30820b82020100300d06092a864886f70d010101050004820b6c30820b680201000282028100acfc585f43ca36ec2dddc518b5c7d1303b658faec58b634aff16ce4b7930b93a23517f8d9c8a260f4e2eb44b01da5b6588fefe63acb68c15677"

decoded, err := hex.decodestring(strprivatekey)
if err != nil {
    return ""
}
privatekey, err := x509.parsepkcs8privatekey(decoded)
if err != nil {
    return ""
}

encypt, err := rsa.encryptpkcs1v15(rand.reader, &privatekey.publickey, data)
if err != nil {
    fmt.println(err)
    return ""
}
privateKey.PublicKey undefined (type any has no field or method PublicKey)

正确答案


根据文档(https://pkg.go.dev/crypto/[email protected]#ParsePKCS8PrivateKey):

您应该使用 type assertion 检查密钥的类型:

switch privatekey := privatekey.(type) {
case *rsa.privatekey:
    // ...
case *ecdsa.privatekey:
    // ...
case ed25519.privatekey:
    // ...
default:
    panic("unknown key")
}

由于 rsa.encryptpkcs1v15 需要 *rsa.publickey,因此您的代码可以这样编写:

if privateKey, ok := privateKey.(*rsa.PrivateKey); ok {
    encypt, err := rsa.EncryptPKCS1v15(rand.Reader, &privateKey.PublicKey, data)
}

顺便说一句,提供的 strprivatekey 无效(encoding/hex:奇数长度十六进制字符串 )。您可以从https://github.com/golang/go/blob/1c05968c9a5d6432fc6f30196528f8f37287dd3d/src/crypto/x509/pkcs8_test.go#L52-L124获取一些有效的私钥

以上就是《无法在 encryptPKCS1v15 函数中使用函数 x509.ParsePKCS8PrivateKey 解析 RSA private key》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>