c#怎么调用java生成的RSA 公钥进行加密?

yuaimao10161215 2012-08-08 10:13:11
java生成的 RSA公钥格式:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZoqP0Ce
TVWB6lL7bdX4iilWEbr03hmgvoBTYO5rzTJEboVcdPwYMT6/qp
jLFfDCu3qytxf+WuRqJVCsw11m4EqypTeyKy3PhkybUG/IoCYE
FwQlq24kIyXQiWUdTJT6FhLDKSfEUqUHpENbXmDZBXM
+Hf4hsEDUKV2kkhRJsnwwIDAQAB
而net 的公钥是xml格式:
<RSAKeyValue><Modulus>vpUk3hmR9kDdo8+AoLfFqpP/JlPkU6VDlMaDq
F5WoNUQcdUsfUT4cQSZaa5O/aeDP2llvPL0paQmlXn1bV2A0dJKTnvlWNQC
/QGFlcVIfSWeDaZnZDn/Z1XEqwBKMnZtCIQZQPws7kqlouV9CmjcA2i8Fm9
S0fDl7F6CfJfJlsM=</Modulus><Exponent>AQAB</Exponent>
</RSAKeyValue>

.net怎么调用java生成的RSA
公钥进行加密?
求助 !!
...全文
1098 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjjrocker 2012-12-17
  • 打赏
  • 举报
回复
同问…………………………
O西瓜 2012-12-17
  • 打赏
  • 举报
回复
这是两个不同的编码格式转换,公钥的编码格式有ASN.1标准,也有CryptoAPI标准, ASN.1标准有SubjectPublicKeyInfo数字证书格式(你提供的第一种格式)和PKCS CryptoAPI标准有CSP Parameter(后面的那种格式)和CSP容器。 他们之间是可以进行转换的,可以参考:http://www.jensign.com/JavaScience/dotnet/JKeyNet/ RSA非对象加密在同一种填充模式和保持相同字节顺序下的加解密结果是相同的。
niss 2012-08-09
  • 打赏
  • 举报
回复
做一个转换工具类吧,把java和net的密钥做互相转化
wy811007 2012-08-09
  • 打赏
  • 举报
回复
用.net 自动生成滴公钥和私钥
有方法的 自动生成
你还是看看 这里吧
http://blog.csdn.net/caitianzhen2/article/details/7210858
qldsrx 2012-08-09
  • 打赏
  • 举报
回复
刚才试了下,.NET产生的密钥长度虽然是128位的,但能识别其它长度的密钥,之后就是调用方法加密了,示例代码如下,具体结果请自行验证是否正确(必须去掉public字符串里面的换行符,我这里因为字符串过长,CSDN不让我贴出来,所以才没去换行符):
            string pubkey = "<RSAKeyValue><Modulus>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZoqP0Ce
TVWB6lL7bdX4iilWEbr03hmgvoBTYO5rzTJEboVcdPwYMT6/qp
jLFfDCu3qytxf+WuRqJVCsw11m4EqypTeyKy3PhkybUG/IoCYE
FwQlq24kIyXQiWUdTJT6FhLDKSfEUqUHpENbXmDZBXM
+Hf4hsEDUKV2kkhRJsnwwID</Modulus><Exponent>AQAB</Exponent>
</RSAKeyValue>";
string s = "测试测试";
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(pubkey);
rsa.FromXmlString(pubkey);
byte[] bytes = Encoding.Default.GetBytes(s);
var tmp = rsa.Encrypt(bytes, false);
var encryptstring = Convert.ToBase64String(tmp);
}
yuaimao10161215 2012-08-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

.NET无法调用JAVA产生的RSA公钥,必须将RSA算法在.NET里面重写才行,在.NET里面RSA的公钥长度是128位的,但是你给出的JAVA公钥却是159位长度,非常的不标准,公钥长度不满足128的肯定无法给.NET使用。

我这里最多帮你做个对应解析,数据是肯定无法用的:
将java的RSA公钥最后四个字母AQAB分割开,用.NET的xml格式表示就是
<RSAKeyValue>……
[/Quote]
难道要自己写算法?
qldsrx 2012-08-08
  • 打赏
  • 举报
回复
.NET无法调用JAVA产生的RSA公钥,必须将RSA算法在.NET里面重写才行,在.NET里面RSA的公钥长度是128位的,但是你给出的JAVA公钥却是159位长度,非常的不标准,公钥长度不满足128的肯定无法给.NET使用。

我这里最多帮你做个对应解析,数据是肯定无法用的:
将java的RSA公钥最后四个字母AQAB分割开,用.NET的xml格式表示就是
<RSAKeyValue><Modulus>MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCZoqP0Ce
TVWB6lL7bdX4iilWEbr03hmgvoBTYO5rzTJEboVcdPwYMT6/qp
jLFfDCu3qytxf+WuRqJVCsw11m4EqypTeyKy3PhkybUG/IoCYE
FwQlq24kIyXQiWUdTJT6FhLDKSfEUqUHpENbXmDZBXM
+Hf4hsEDUKV2kkhRJsnwwID</Modulus><Exponent>AQAB</Exponent>
</RSAKeyValue>
这里的数据都是用的BASE64编码,你用BASE64解码后可以得到byte[],就可以看到密钥长度了,实际密钥要转换为BigInteger后才能参与RSA核心运算。

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧