我正在使用 RSA 对 Android 上的用户名和密码进行加密,并在服务器上(tomcat 6,java 1.6)对其进行解密。
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之外(只是在主方法中)使用它,那么它可以正常工作。但在我的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以十进制形式包含模数和指数。
我做错了什么?
谢谢
pubKey
吗?这是真正的代码吗,还是你只是从记忆中输入到问题中的? - President James K. Polk