';ASN1损坏数据。替换公钥而不是私钥时出错 [英] 'ASN1 corrupted data.' error when replacing public key but not private key
本文介绍了';ASN1损坏数据。替换公钥而不是私钥时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
学习使用RSA签名的机制,我有一段代码可以在下面运行。
var privateRSAKey = File.ReadAllText("RSAPrivateKey.txt").Trim();
Regex privateRSAKeyRegex = new Regex(@"-----(BEGIN|END) RSA PRIVATE KEY-----[W]*");
privateRSAKey = privateRSAKeyRegex.Replace(privateRSAKey, "");
//byte[602]
byte[] rsaPrivateKeyBytes = Convert.FromBase64String(privateRSAKey);
RSA rsa = RSA.Create();
rsa.ImportRSAPrivateKey(new ReadOnlySpan<byte>(rsaPrivateKeyBytes), out _);
但类似的块不适用于替换另一个RSA对象上的公钥。
publicRSAKey = File.ReadAllText("RSAPublicKey.txt").Trim();
Regex publicRSAKeyRegex = new Regex(@"-----(BEGIN|END) PUBLIC KEY-----[W]*");
publicRSAKey = publicRSAKeyRegex.Replace(publicRSAKey, "");
//byte[162]
byte[] rsaPublicKeyBytes = Convert.FromBase64String(publicRSAKey);
RSA recipientRSA = RSA.Create();
recipientRSA.ImportRSAPublicKey(new ReadOnlySpan<byte>(rsaPublicKeyBytes), out _);
我只想用替换字符串文件中的公共rsa密钥,但收到错误
An unhandled exception of type 'System.Security.Cryptography.CryptographicException' occurred in System.Security.Cryptography.Algorithms.dll
ASN1 corrupted data.
推荐答案
我在发帖后发现了这个 https://vcsjones.dev/key-formats-dotnet-3/
To summarize each PEM label and API pairing:
"BEGIN RSA PRIVATE KEY" => RSA.ImportRSAPrivateKey
"BEGIN PRIVATE KEY" => RSA.ImportPkcs8PrivateKey
"BEGIN ENCRYPTED PRIVATE KEY" => RSA.ImportEncryptedPkcs8PrivateKey
"BEGIN RSA PUBLIC KEY" => RSA.ImportRSAPublicKey
"BEGIN PUBLIC KEY" => RSA.ImportSubjectPublicKeyInfo
我的问题是我的密钥格式为-----BEGIN PUBLIC KEY-----
我使用的是ImportRSAPublicKey
。
我切换到.ImportSubjectPublicKeyInfo
,一切正常
这篇关于';ASN1损坏数据。替换公钥而不是私钥时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文