Я использую 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;
Если я использую часть андроида ВНЕ андроида (только в основном методе), он работает нормально. Но не внутри моего андроида (эмулятора). На стороне сервера я получаю следующую ошибку:
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 содержит модуль и показатель в шестнадцатеричном формате. И если я отлаживаю в основном методе (опять тот же код), я вижу, что pubKey содержит модуль и показатель степени в десятичном виде.
Что я делаю не так?
Спасибо