简体   繁体   English

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

[英]How to load RSA public key in PKCS #1, ASN.1 DER form

We have a Go app that generates an RSA key and sends the public key to the client in PKCS #1, ASN.1 DER form.我们有一个 Go 应用程序,它生成一个 RSA 密钥并将公钥以 PKCS #1、ASN.1 DER 形式发送给客户端。

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

When I try to load the same public key in the c++ client using Botan 1.10.17:当我尝试使用 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();
}

I get an exception:我得到一个例外:

Decoding error: X.509 public key decoding failed

Here is the public key generated by the server:这是服务器生成的公钥:

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

It seems Botan 1.10.17 expects the public key in the PKIX, ASN.1 DER form.看来 Botan 1.10.17 需要 PKIX、ASN.1 DER 形式的公钥。 So using x509.MarshalPKIXPublicKey() instead of x509.MarshalPKCS1PublicKey() in Golang made the C++ Botan client work.所以在 Golang 中使用x509.MarshalPKIXPublicKey()而不是x509.MarshalPKCS1PublicKey()使得 C++ Botan 客户端工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM