AsnContentException:提供的数据标记有 'Universal' class 值“16”,但它应该是 'Universal' class 值“2”
AsnContentException: The provided data is tagged with 'Universal' class value '16', but it should have been 'Universal' class value '2'
我正在尝试使用 BouncyCastle 创建 RSA 密钥对,然后尝试导入生成的 public 密钥,但我收到以下错误
AsnContentException: The provided data is tagged with 'Universal' class value '16', but it should have been 'Universal' class value '2'.
代码如下
RsaKeyPairGenerator rsaKeyPairGenerator = new RsaKeyPairGenerator();
rsaKeyPairGenerator.Init(new KeyGenerationParameters(new SecureRandom(), 2048));
AsymmetricCipherKeyPair keys = rsaKeyPairGenerator.GenerateKeyPair();
PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(keys.Private);
byte[] serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetDerEncoded();
SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keys.Public);
byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded();
RSA publicRsaKey = RSA.Create();
publicRsaKey.ImportRSAPublicKey(serializedPublicBytes, out _);
有人知道我为什么会收到这个吗?
正如总统 James K. Polk 在评论中所述,导出的 public 密钥 serializedPublicBytes
是 X.509/SPKI 格式的 DER 编码密钥,可以使用 ImportSubjectPublicKeyInfo()
,而 ImportRSAPublicKey()
需要 PKCS#1 格式的 DER 编码 public 密钥。
为了完整起见:PKCS#1 格式可以很容易地从 publicKeyInfo
派生,并在发布的代码中添加以下内容:
RsaPublicKeyStructure rsaPublicKey = RsaPublicKeyStructure.GetInstance(publicKeyInfo.ParsePublicKey());
byte[] pkcs1Der = rsaPublicKey.ToAsn1Object().GetDerEncoded();
以便也可以通过 ImportRSAPublicKey()
传递 pkcs1Der
来完成导入,或者如果需要 PKCS#1 格式的 public 密钥。
我正在尝试使用 BouncyCastle 创建 RSA 密钥对,然后尝试导入生成的 public 密钥,但我收到以下错误
AsnContentException: The provided data is tagged with 'Universal' class value '16', but it should have been 'Universal' class value '2'.
代码如下
RsaKeyPairGenerator rsaKeyPairGenerator = new RsaKeyPairGenerator();
rsaKeyPairGenerator.Init(new KeyGenerationParameters(new SecureRandom(), 2048));
AsymmetricCipherKeyPair keys = rsaKeyPairGenerator.GenerateKeyPair();
PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(keys.Private);
byte[] serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetDerEncoded();
SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keys.Public);
byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded();
RSA publicRsaKey = RSA.Create();
publicRsaKey.ImportRSAPublicKey(serializedPublicBytes, out _);
有人知道我为什么会收到这个吗?
正如总统 James K. Polk 在评论中所述,导出的 public 密钥 serializedPublicBytes
是 X.509/SPKI 格式的 DER 编码密钥,可以使用 ImportSubjectPublicKeyInfo()
,而 ImportRSAPublicKey()
需要 PKCS#1 格式的 DER 编码 public 密钥。
为了完整起见:PKCS#1 格式可以很容易地从 publicKeyInfo
派生,并在发布的代码中添加以下内容:
RsaPublicKeyStructure rsaPublicKey = RsaPublicKeyStructure.GetInstance(publicKeyInfo.ParsePublicKey());
byte[] pkcs1Der = rsaPublicKey.ToAsn1Object().GetDerEncoded();
以便也可以通过 ImportRSAPublicKey()
传递 pkcs1Der
来完成导入,或者如果需要 PKCS#1 格式的 public 密钥。