You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python生成的RSA公钥无法导入C#:ASN1数据损坏异常

Python Crypto生成的RSA公钥无法被.NET Core 6读取的解决方案

问题根源

你遇到的AsnContentException错误,本质是Python端导出的公钥格式和.NET端预期的格式不匹配:

Python的Crypto.PublicKey.RSA模块中,exportKey()方法默认导出PEM格式的公钥(包含-----BEGIN PUBLIC KEY-----这类头部尾部文本)。直接对这个PEM字符串做Base64编码后,传给.NET时,解码得到的是带文本头部的字节数据,而非.NET要求的纯ASN.1 DER编码二进制数据。这就导致.NET解析ASN.1结构时,识别到错误的标签类型(错误信息里的Universal 13对应UTF8String,而预期的Universal 16是ASN.1 Sequence结构)。

修正Python端代码

需要明确指定exportKey()导出DER格式的公钥结构,根据.NET要使用的导入方法,分两种情况:

情况1:对应.NET的ImportSubjectPublicKeyInfo

导出标准的SubjectPublicKeyInfo结构(PKCS#8格式的公钥):

from Crypto.PublicKey import RSA
import base64

key = RSA.generate(2048)
# 导出DER编码的SubjectPublicKeyInfo结构
public_key_der = key.publickey().exportKey(format='DER', pkcs=8)
public_key = base64.b64encode(public_key_der).decode('utf8')

情况2:对应.NET的ImportRSAPublicKey

导出裸RSA公钥结构(PKCS#1格式):

from Crypto.PublicKey import RSA
import base64

key = RSA.generate(2048)
# 导出DER编码的裸RSA公钥结构
public_key_der = key.publickey().exportKey(format='DER', pkcs=1)
public_key = base64.b64encode(public_key_der).decode('utf8')

对应的.NET Core代码

根据Python端导出的格式,选择对应的导入方法:

对应SubjectPublicKeyInfo的导入

byte[] publicKeyBytes = Convert.FromBase64String(base64PublicKey);
RSA rsa = RSA.Create();
rsa.ImportSubjectPublicKeyInfo(publicKeyBytes, out int bytesRead);

对应裸RSA公钥的导入

byte[] publicKeyBytes = Convert.FromBase64String(base64PublicKey);
RSA rsa = RSA.Create();
rsa.ImportRSAPublicKey(publicKeyBytes, out int bytesRead);

内容的提问来源于stack exchange,提问作者jwatts1980

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:35:29