微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以 PKCS #1、ASN.1 DER 形式加载 RSA 公钥

如何解决如何以 PKCS #1、ASN.1 DER 形式加载 RSA 公钥

我们有一个 Go 应用,它生成 RSA 密钥并将公钥以 PKCS #1、ASN.1 DER 形式发送给客户端。

https://golang.org/pkg/crypto/x509/#MarshalPKCS1PublicKey

当我尝试使用 Botan 1.10.17 在 C++ 客户端中加载相同的公钥时:

try
{
    Botan::AutoSeeded_RNG rng;
    Botan::DataSource_Memory pubKeyMem(publicKey); // here public key is in PKCS #1,ASN.1 DER form
    Botan::RSA_PublicKey *rsaKey = dynamic_cast<Botan::RSA_PublicKey*>(Botan::X509::load_key(pubKeyMem));
    ...
}
catch (std::exception& e)
{
    cout << e.what();
}

我得到一个例外:

Decoding error: X.509 public key decoding Failed

这里是服务器生成的公钥:

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA80s5aG/cuYU/xT3WsC5FkJmMdCg1SFFuc+qJT8aB1IgR3mnKGARf
tKpZ3Uk8Ehp1PSgS+tJE+NhE5fjU8S2K9EtGbep4DAK/TmeJ1TQvJXtCcrMH7MFV
Ck57X972MChnR5wJYrCnBYXt4Q9f76AT4PfFHCgN+eePYD175VIUN7rZlqZaqgX4
LAWQQpZsrj1DersOeH6YfMeuXpltljePGlKcutvWtr3LqGSAkPKAngW3gGTNcxXh
s8EW0CxXctvPLuWArlV2afU6XIpqWGVxB3NlRVuU64XvOE+aXyL2LyX2dxcWzzs8
mKjwp4SQW2xiJiQoRy3gmAR8oV8Jgffs2wIDAQAB
-----END RSA PUBLIC KEY-----

解决方法

似乎 Botan 1.10.17 需要 PKIX、ASN.1 DER 形式的公钥。因此,在 Golang 中使用 x509.MarshalPKIXPublicKey() 而不是 x509.MarshalPKCS1PublicKey() 使 C++ Botan 客户端工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。