Bouncy Castle C#-从字节数组获取公钥对象

Bouncy Castle C#-从字节数组获取公钥对象,c#,bouncycastle,C#,Bouncycastle,我试图从包含公钥的字节数组中获取BouncyCastle的AsymmetricKeyParameter对象。我面临的一个特别的例子是以最简单的方式编码的RSA公钥,即作为一个包含两个整数对象的DER序列,模数和公共指数;但是,我不能假设它总是RSA(也可以是ECDSA) 我在网上找到的示例建议使用PublicKeyFactory.CreateKey,我是这样做的: Asn1InputStream ais = new Asn1InputStream(content); Asn1Object pub

我试图从包含公钥的字节数组中获取BouncyCastle的AsymmetricKeyParameter对象。我面临的一个特别的例子是以最简单的方式编码的RSA公钥,即作为一个包含两个整数对象的DER序列,模数和公共指数;但是,我不能假设它总是RSA(也可以是ECDSA)

我在网上找到的示例建议使用PublicKeyFactory.CreateKey,我是这样做的:

Asn1InputStream ais = new Asn1InputStream(content);
Asn1Object publicKey = ais.ReadObject();
var pubkeyParams = PublicKeyFactory.CreateKey(publicKey.GetEncoded());
不幸的是,这给了我一个异常“GetInstance中的未知对象:Org.BouncyCastle.Asn1.DerInteger\n参数名称:obj”

我想这与密钥在字节数组中的编码方式有关。不幸的是,这不是我能控制的;但它也不是完全糟糕,因为当我在带有密钥数据的bin文件上运行
OpenSSL rsa-in publicKey.bin-RSAPublicKey_-in-inform DER-text
时,OpenSSL命令行实用程序不会抗议


如果您能帮我继续,我将不胜感激。我正在考虑尝试将密钥数据解析为RSA,如果这不起作用,则作为ECDSA,然后在发生异常时折叠。我不知道如何使用BC…

PublicKeyFactory
用于编码X.509 ASN.1类型
SubjectPublicKeyInfo
。如果您希望能够以通用方式使用公钥,则最好对公钥使用
SubjectPublicKeyInfo
(对私钥使用PKCS#8
PrivateKeyInfo

听起来您有一个ASN.1
RSAPublicKey
编码,在这种情况下,您可以调整示例代码以使用:

var rsaKey = Org.BouncyCastle.Asn1.X509.RsaPublicKeyStructure.GetInstance(publicKey);

var pubkeyParams = new RsaKeyParameters(false, rsaKey.Modulus, rsaKey.PublicExponent);
ECDSA密钥同样可以有几种可能的格式,因此最好将其作为一个单独的问题