x509.ParsePKCS8PrivateKey返回RSA私钥无法用于EncryptPKCS1v15的问题
问题解决:x509.ParsePKCS8PrivateKey返回值无法直接访问PublicKey
错误原因很明确:x509.ParsePKCS8PrivateKey的返回类型是any(通用接口类型),它可以兼容多种私钥类型(比如RSA、ECDSA),所以编译器不知道它具体是哪种私钥,自然不允许直接访问PublicKey字段。
解决方法是类型断言,把返回的any类型转换成具体的*rsa.PrivateKey,之后就能正常访问其PublicKey属性了。
修改后的代码如下:
const strPrivateKey = "30820b82020100300d06092a864886f70d010101050004820b6c30820b680201000282028100acfc585f43ca36ec2dddc518b5c7d1303b658faec58b634aff16ce4b7930b93a23517f8d9c8a260f4e2eb44b01da5b6588fefe63acb68c15677" decoded, err := hex.DecodeString(strPrivateKey) if err != nil { return "" } privateKey, err := x509.ParsePKCS8PrivateKey(decoded) if err != nil { return "" } // 类型断言为RSA私钥 rsaPrivKey, ok := privateKey.(*rsa.PrivateKey) if !ok { // 处理不是RSA私钥的情况,比如返回错误或日志 return "" } encrypt, err := rsa.EncryptPKCS1v15(rand.Reader, &rsaPrivKey.PublicKey, data) if err != nil { fmt.Println(err) return "" }
注意点:
- 类型断言时一定要用
ok模式判断,避免断言失败导致程序 panic - 如果你的场景中私钥类型固定是RSA,也可以直接用强制断言,但不推荐,一旦私钥类型变化会直接崩溃
内容的提问来源于stack exchange,提问作者Temuujin Oyuntsetseg
相关产品推荐
相关产品推荐

