estoy usando RSA para cifrar usuario y contraseña en Android y descifrarlos en el servidor (Tomcat 6, Java 1.6). cifrado Android:cifrado RSA: Diferencia entre Java y 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 Descifrado:
PrivateKey pubKey = readPrivateKeyFromFile(mod, ex);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(data);
return cipherData;
Si utilizo el androide androide FUERA parte (Sólo en un método principal) que trabaja muy bien. Pero no dentro de mi Android (Emulador). Por el lado de servidor me sale el siguiente error:
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*..)
guardo el Ministerio de Defensa y ex como constantes BigIntegers así que no escribo en un archivo. Sé que hay diferencia entre el cifrado java1.6 y java 1.5, por lo que ambos se compilan con java 1.6.
alguna información de depuración:
Durante depuración en Android que se puede ver que contiene pubkey módulo y exponente en hexadecimal. Y si depuro en un método principal (de nuevo el mismo código) puedo ver que pubKey contiene módulo y exponente en decimal.
¿Qué estoy haciendo mal?
Gracias
duplicado posible: http: // stackoverflow.com/questions/4926126/rsa-encryption-in-java-cross-platform-issues –
¿Realmente le llama la clave privada 'pubKey'? ¿Es esto realmente el código o simplemente tecleaste la pregunta desde la memoria? –
** Advertencia ** para nuevos protocolos, pruebe y use relleno OAEP en su lugar. PKCS # 1 es vulnerable a los ataques de oráculo de relleno. –