X509Certificate2类怎样导入一个公钥字符串 rsa解密x509 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://msdn.microsoft.com/zh-cn/library/system.security.cryptography.rsa.fromxmlstring(v=vs.100).aspx 以及 http://msdn.microsoft.com/zh-cn/library/system.security.cryptography.rsa.exportparameters(v=vs.100).aspx FromXmlString,不行哦,它要求从xml导入 A单位是我们无法控制的,A单位只能提交X509Certificate2.GetPublicKeyString()方法得到的16进制字符串,无法让A单位提交一个XML 使用X509Certificate2.GetPublicKeyString()难度比较大。它格式用的是DER Encoding of ASN.1 Types。比如3082010A0282010100D93E8921F06B5A2E9...020301000130:表示SEQUENCE类型82010A:表示SEQUENCE长度为010A(其中82超过80,表示后面有2个字节的长度信息)02:表示整数类型820101:表示整数长度为0101(十进制为257)00D93E89...:该整数就是modulus,00用来表示正整数,扣除00后还有256个字节,因此modulus为256个字节最后是Exponent0203010001: 02表示整数,03长度为3,010001就是Exponent既然A单位可以得到GetPublicKeyString,建议A单位转为提交X509Certificate2.PublicKey.Key.ToXmlString(),给出的xml类似:<RSAKeyValue> <Modulus>2T6J...Yvy3PTw==</Modulus> <Exponent>AQAB</Exponent></RSAKeyValue>该xml直接给出了Modulus和Exponent,并可以直接被RSACryptoServiceProvider导入。如果注意观察,其中Exponent的AQAB就是010001这3个字节的Base64编码,而Modulus的2T6J...就是D93E89...的Base64编码。DER Encoding of ASN.1 Types可参考http://msdn.microsoft.com/en-us/library/windows/desktop/bb648640%28v=vs.85%29.aspxhttp://en.wikipedia.org/wiki/Distinguished_Encoding_Rules#DER_encoding 谢谢楼上各位,解释的非常详细。我尝试把“3082010A0282010100D93E8921F06B5A2E9...0203010001”前面的18位截去,把“D93E89...0203010001”转成Base64编码,来直接组XML,但没找到合适的方法吧““D93E89...0203010001””转成“2T6J...Yvy3PTw==”。算了,放弃了还是直接让A单位导出XML,B单位导入XML吧谢谢楼上各位了 C#里如何检测用户按下按键 截取字符串问题 asp.net 读取excel出现奇异问题! 急!提问 请教正则提取网页url和网格数据 CF 2.0里Hashtable如何序列化? 如何从XML文件中检索特定数据 简单问题请教与 SQL Server关联问题 Encoding.UTF8.GetBytes() 同 encoding.GetBytes() 编码的结果一样? 实在莫名其妙:(大家帮忙看看吧!!谢谢 socket同步通讯,收到的数据无法进行字符串运算? 关于DATAGRIDVIEW 单元格值的改变
比如3082010A0282010100D93E8921F06B5A2E9...0203010001
30:表示SEQUENCE类型
82010A:表示SEQUENCE长度为010A(其中82超过80,表示后面有2个字节的长度信息)
02:表示整数类型
820101:表示整数长度为0101(十进制为257)
00D93E89...:该整数就是modulus,00用来表示正整数,扣除00后还有256个字节,因此modulus为256个字节
最后是Exponent
0203010001: 02表示整数,03长度为3,010001就是Exponent既然A单位可以得到GetPublicKeyString,建议A单位转为提交
X509Certificate2.PublicKey.Key.ToXmlString(),给出的xml类似:
<RSAKeyValue>
<Modulus>2T6J...Yvy3PTw==</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
该xml直接给出了Modulus和Exponent,并可以直接被RSACryptoServiceProvider导入。
如果注意观察,其中Exponent的AQAB就是010001这3个字节的Base64编码,而Modulus的2T6J...就是D93E89...的Base64编码。
DER Encoding of ASN.1 Types可参考
http://msdn.microsoft.com/en-us/library/windows/desktop/bb648640%28v=vs.85%29.aspx
http://en.wikipedia.org/wiki/Distinguished_Encoding_Rules#DER_encoding
谢谢楼上各位,解释的非常详细。我尝试把“3082010A0282010100D93E8921F06B5A2E9...0203010001”前面的18位截去,把“D93E89...0203010001”转成Base64编码,来直接组XML,但没找到合适的方法吧““D93E89...0203010001””转成“2T6J...Yvy3PTw==”。算了,放弃了还是直接让A单位导出XML,B单位导入XML吧谢谢楼上各位了