近期因项目的需要,研究了一下C#和Java实现的前后台程序间的数据加解密算法。从网上检索的信息看,说这两种语言实现的RSA算法交互方面存在问题的帖子比较多。仔细分析并亲手实践了一下,发现问题没有想象的那么困难,只要解决好以下2个问题,基本就OK了。
首先,要解决公私钥问题,找出在C#和Java中可以通用的公私钥(或相互转换的方法)。
其次,要统一字符编码,否则会出现汉字乱码的现象。
再次,没有了
好了,废话少说,直接上代码。
1 C#部分
1.1 生成公私钥
CspParameters cpSend = new CspParameters();
cpSend.KeyContainerName = "MyKeyContainerName";
RSACryptoServiceProvider rsaSend = new RSACryptoServiceProvider(cpSend);
string str_public = rsaSend.ToXmlString(false);
string str_private = rsaSend.ToXmlString(true);
str_public/str_private为符合xml格式的字符串,示例如下:
str_public=
<RSAKeyValue> <Modulus>ztZzQktkd9e3W8wufPfrAwoDC672Xn8TjAOhn5+FfVtZHl+0KDEhIiPwQxXzw0wRZ09uN8tXcp80G7fIPOTEFdR21YNHas6NUQlglTUKK2y1V3bmgKD4OHQxVAeziCbUgwd4Ix422up4b+JkVG1b4IM7Ss51vuaa5S3tQAEqVVM=</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
str_private=
<RSAKeyValue>
<Modulus>ztZzQktkd9e3W8wufPfrAwoDC672Xn8TjAOhn5+FfVtZHl+0KDEhIiPwQxXzw0wRZ09uN8tXcp80G7fIPOTEFdR21YNHas6NUQlglTUKK2y1V3bmgKD4OHQxVAeziCbUgwd4Ix422up4b+JkVG1b4IM7Ss51vuaa5S3tQAEqVVM=</Modulus>
<Exponent>AQAB</Exponent>
<P>6OxLhbx4oNhlrjl36VVu0CIsbTo8BMzqdfh/v7IA0PBdFkh4OxZ2axJIHs+7z4YcGM06jTHoGqbbnX77D1yKUw==</P>
<Q>41SLUOvL6v3ogJDzRKO8QfOC4nAANdG2tDBw7aT6fTvqInH1RBocZRopUi6CuscRcOljgFQuhRrR5V7Eje+pAQ=&