我使用RSA加密Android上的用户名和密码,并在服务器上解密它们(tomcat 6,java 1.6).Android加密:
PublicKey pubKey = readPublicKeyFromFile(mod, ex);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(data);
return cipherData;
Java Tomcat解密:
PrivateKey pubKey = readPrivateKeyFromFile(mod, ex);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(data);
return cipherData;
如果我使用android部分OUTSIDE android(只是在主方法)它工作正常.但不在我的android(模拟器)里面.在服务器端,我收到以下错误:
javax.crypto.BadPaddingException: Blocktype mismatch: 0
at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:311)
at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:255)
at com.sun.crypto.provider.RSACipher.a(DashoA13*..)
at com.sun.crypto.provider.RSACipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
我将mod和ex保留为BigIntegers常量,因此我不将它们写入文件中.我知道java1.6和java 1.5加密之间存在差异,因此两者都是用java 1.6编译的.
一些调试信息:
在android中调试期间,我可以看到pubKey包含十六进制的模数和指数.如果我在main方法中调试(同样的代码),我可以看到pubKey包含十进制的模数和指数.
我究竟做错了什么?
谢谢