私は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の部分OUTSIDEandroid(mainメソッドだけで)を使用すると、正常に動作します。しかし、私のアンドロイド(エミュレーター)の中にはありません。サーバー側では、次のエラーが発生します。
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とjava1.5の暗号化には違いがあることを知っているので、どちらもjava1.6でコンパイルされます。
いくつかのデバッグ情報:
Androidでのデバッグ中に、pubKeyに16進数のモジュラスと指数が含まれていることがわかります。また、メインメソッド(同じコード)でデバッグすると、pubKeyに10進数のモジュラスと指数が含まれていることがわかります。
私は何が間違っているのですか?
ありがとう