我参照这个帖子
http://sunxboy.iteye.com/blog/209156
做了个RSA的加密解密,
流程是这样的
浏览器通过服务端提供的公钥进行加密,然后发到服务器上,通过私钥解密,
但是使用这个解密方法的时候有时可以解密成功,但有时却在解密的时候报 Bad arguments异常,我看见那个帖子的回复说问题出在这句话上
byte[] en_result = new BigInteger(result, 16).toByteArray();
我查了查,还真是, 秘文传过来一共有256个字符,通过转成字节数组,同样的明文,有时传过来转成的字节数组长度为128,有的时候却又是129,
说是这个转字节数组的方式问题嘛,我就换了一个方式
public static byte[] hexStringToByte(String hex) {
int len = (hex.length() / 2);
byte[] result = new byte[len];
char[] achar = hex.toCharArray();
for (int i = 0; i < len; i++) {
int pos = i * 2;
result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
}
return result;
}
这下不报Bad arguments异常了,改报 input too large for RSA cipher. 异常了,
用 hexStringToByte 这个方法转字节数组这下数组的长度很稳定都是128了 不会出现129的情况,可是依然解密不成功,
请教下又没人懂RSA的?