替换RSA公钥时出现ASN1 corrupted data错误如何解决?
问题根源
你当前使用的ImportRSAPublicKey方法仅适配PKCS#1格式的RSA公钥,对应文件头尾标识为-----BEGIN RSA PUBLIC KEY-----。而你读取的公钥文件头尾是-----BEGIN PUBLIC KEY-----,属于X.509标准的SubjectPublicKeyInfo通用公钥结构,两者的ASN.1编码规则不匹配,因此触发了ASN1数据损坏的异常。
解决方案
仅需要替换公钥导入的方法即可,其余逻辑无需修改:
把原来的导入代码:
recipientRSA.ImportRSAPublicKey(new ReadOnlySpan<byte>(rsaPublicKeyBytes), out _);
替换为:
recipientRSA.ImportSubjectPublicKeyInfo(new ReadOnlySpan<byte>(rsaPublicKeyBytes), out _);
补充说明
后续遇到密钥导入报错可优先核对格式和导入方法的匹配关系:
- PKCS#1 RSA私钥(头尾
-----BEGIN RSA PRIVATE KEY-----):使用ImportRSAPrivateKey - PKCS#8 通用私钥(头尾
-----BEGIN PRIVATE KEY-----):使用ImportPkcs8PrivateKey - PKCS#1 RSA公钥(头尾
-----BEGIN RSA PUBLIC KEY-----):使用ImportRSAPublicKey - X.509 SubjectPublicKeyInfo公钥(头尾
-----BEGIN PUBLIC KEY-----):使用ImportSubjectPublicKeyInfo
内容的提问来源于stack exchange,提问作者Joseph Hailu
相关产品推荐
相关产品推荐

