天天看点

C# Java间进行RSA加密解密交互

这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益,但没能解决我的实际问题,终于,还是被我捣鼓出来了。

首先,介绍一下写这代码的目的:完成webService验证问题,服务器端采用C#开发,客户端采用Java开发。服务器端给客户端提供公钥,已进行数据加密,客户端加密后提数据提交给服务器,服务器用私钥对数据解密,进行验证。 

这里遇到的主要问题是C# RSACryptoServiceProvider类产生的公钥、私钥都是xml字符串数据,而java RSA算法要求的 Modulus、Exponent都是BigInteger类型,两者间的转换才是问题所在。 

接下来讲一下实现步骤:

首先由C# RSACryptoServiceProvider类生成公钥、私钥

如此处生成的公钥为

在客户端(Java)对C#提供的公钥提取Modulus和Exponent

用Modulus和Exponent产生公钥RSAPublicKey(java)

这里有个关键步骤先对Mudolus和Exponent进行Base64解码,这个是由于C#生成的密钥对,其参数已经过Base64编码成String类型,而java

RSA参数是未经base64编码的byte[]类型。

获得公钥后就可以进行RSA加密处理了,这里还有一点需要提的是,RSA加密解密都有最大长度限制,加密最大长度为117字节,解密最大长度是128字节,此外,此处加密得到的数据是经过Base64编码处理的

加密后的数据提交给C#服务器端进行解密,当然,这里也要注意最大长度限制问题

这样,就顺利完成了。

经过测试,这样做的确得到了正确的结果。

若是有什么地方有问题,还望大家指正!

----------------------------------------------------------------------------------------

<a target="_blank" href="http://blog.csdn.net/dslinmy/article/details/37881067">C# Java间进行RSA加密解密交互(二)</a>

<a target="_blank" href="http://blog.csdn.net/dslinmy/article/details/38016831">C# Java间进行RSA加密解密交互(三)</a>