Bouncy Castle C# - 从字节数组中获取 public 键对象
Bouncy Castle C# - getting public key object from byte array
我正在尝试从包含 public 密钥的字节数组中获取 BouncyCastle 的 AsymmetricKeyParameter 对象。我面临的特定示例是以最简单的方式编码的 RSA public 密钥,即作为具有两个 INTEGER 对象、模数和 public 指数的 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\nParameter 名称:obj”
我想这与密钥在该字节数组中的编码方式有关。不幸的是,这不是我能控制的;但它也不是完全搞砸了,因为当我 运行 openssl rsa -in publicKey.bin -RSAPublicKey_in -inform DER -text
在带有关键数据的 bin 文件上时,OpenSSL 命令行实用程序不会抗议。
对于如何进行的任何帮助,我将不胜感激。我正在考虑尝试将关键数据解析为 RSA,如果这不起作用则解析为 ECDSA,然后在发生异常时折叠。不过我不确定如何用 BC 来做...
PublicKeyFactory
用于 X.509 ASN.1 类型的编码 SubjectPublicKeyInfo
。如果您希望能够以通用方式使用 public 密钥,最好将 SubjectPublicKeyInfo
用于 public 密钥(以及 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 密钥同样可以采用多种可能的格式,因此最好将其作为一个单独的问题。
我正在尝试从包含 public 密钥的字节数组中获取 BouncyCastle 的 AsymmetricKeyParameter 对象。我面临的特定示例是以最简单的方式编码的 RSA public 密钥,即作为具有两个 INTEGER 对象、模数和 public 指数的 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\nParameter 名称:obj”
我想这与密钥在该字节数组中的编码方式有关。不幸的是,这不是我能控制的;但它也不是完全搞砸了,因为当我 运行 openssl rsa -in publicKey.bin -RSAPublicKey_in -inform DER -text
在带有关键数据的 bin 文件上时,OpenSSL 命令行实用程序不会抗议。
对于如何进行的任何帮助,我将不胜感激。我正在考虑尝试将关键数据解析为 RSA,如果这不起作用则解析为 ECDSA,然后在发生异常时折叠。不过我不确定如何用 BC 来做...
PublicKeyFactory
用于 X.509 ASN.1 类型的编码 SubjectPublicKeyInfo
。如果您希望能够以通用方式使用 public 密钥,最好将 SubjectPublicKeyInfo
用于 public 密钥(以及 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 密钥同样可以采用多种可能的格式,因此最好将其作为一个单独的问题。