RSA加密:Java和Android之间的区别
2022-09-01 16:53:01
我正在使用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 Decryption:
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包含十进制的模数和指数。
我做错了什么?
谢谢