问题描述
现在情况是java方提供了公钥是这样的(85cbe3b8ecbeb3fb2f66127ec44329ba8a525452edb92bfcc3b0cac0765c4ec0745d157c62830003fc4629fa89d3a1f89719734c27e7c7290bb74316d5bc7f31bd4852f10a3bdf864a83401d56c5104c98560e54e981da2388fa2dd0c5513e51357263db82f056c92c25d37c81e69ade92935f954ece0dd95202735122a92b3d)现在C#要用这个公钥加密,但是相同的明文每次加密结果都不一样,而java方说每次加密的密文都一样的不知道是我使用该公钥的方式有问题,还是其他问题,部分代码如下:publicstringEncrypRSA(stringcontent){stringexponent="10001";stringmodulus="85cbe3b8ecbeb3fb2f66127ec44329ba8a525452edb92bfcc3b0cac0765c4ec0745d157c62830003fc4629fa89d3a1f89719734c27e7c7290bb74316d5bc7f31bd4852f10a3bdf864a83401d56c5104c98560e54e981da2388fa2dd0c5513e51357263db82f056c92c25d37c81e69ade92935f954ece0dd95202735122a92b3d";RSAParametersrsaParameters2=newRSAParameters(){Exponent=RSA.MyRSAcs.hexStringToBytes(exponent),//newbyte[]{01,00,01}Modulus=RSA.MyRSAcs.hexStringToBytes(modulus),//newbyte[]{A3,A6,...}};RSACryptoServiceProviderrsa=newRSACryptoServiceProvider();rsa.ImportParameters(rsaParameters2);byte[]sample=rsa.Encrypt(Encoding.Default.GetBytes(content),false);stringj2=RSA.MyRSAcs.ToHexString(sample);stringd2=j2;returnj2;}
希望有相关经验的朋友解答下!谢谢!
解决方案
解决方案二:
java里面一个字符是两个字节,C#里面一个字符是一个字节。而加密算法中加密是按照字节加密的,因此同样的公钥字符串,得出的结果应该是不一样的。你们应该用同样的byte[]数组,而不是同样的字符串。你让java端将他的明文和公钥以byte数组的形式给你,保证两边的送进去加密的byte数组是一样的,然后再试试。
解决方案三:
引用1楼Libby1984的回复:
java里面一个字符是两个字节,C#里面一个字符是一个字节。而加密算法中加密是按照字节加密的,因此同样的公钥字符串,得出的结果应该是不一样的。你们应该用同样的byte[]数组,而不是同样的字符串。你让java端将他的明文和公钥以byte数组的形式给你,保证两边的送进去加密的byte数组是一样的,然后再试试。
好,谢谢提供信息,那C#中的RSA加密每次密文不一样这个是正常的吗?java那边每次加密的密文都是一样的!
解决方案四:
引用2楼yisheng314的回复:
Quote: 引用1楼Libby1984的回复:
java里面一个字符是两个字节,C#里面一个字符是一个字节。而加密算法中加密是按照字节加密的,因此同样的公钥字符串,得出的结果应该是不一样的。你们应该用同样的byte[]数组,而不是同样的字符串。你让java端将他的明文和公钥以byte数组的形式给你,保证两边的送进去加密的byte数组是一样的,然后再试试。好,谢谢提供信息,那C#中的RSA加密每次密文不一样这个是正常的吗?java那边每次加密的密文都是一样的!
理论上应该是一样的。其实最主要的还是看你的私钥能否解开公钥加密的数据。或者公钥解开私钥加密的数据。