我正在使用 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;
如果我使用 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 包含十进制的模数和指数。
我究竟做错了什么?
谢谢