estoy usando lo siguiente en una aplicación para Android y una aplicación Java independiente:Especifica los argumentos de Cipher.getInstance()?
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
...
puedo obtener diferentes cadenas cifradas en Android vs mi aplicación Java independiente (ambos utilizan el mismo código y clave). Me da la misma excepción (javax.crypto.BadPaddingException: BlockType desajuste: 0) como en esta pregunta:
RSA Encryption: Difference between Java and Android
Y la solución sugerida es para especificar la estrategia de relleno como:
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
pero estoy usando "AES", no "RSA", y no estoy seguro de cómo especificar el relleno en combinación con AES. ¿Cómo construiría la cadena pasada a Cipher.getInstance() en ese caso? Probé esto:
Cipher cipher = Cipher.getInstance("AES/PKCS1Padding");
pero recibe una excepción sobre que no es válido.
Gracias
probar este sistema de cifrado de cifrado = Cipher.getInstance ("AES/CBC/ISO10126Padding", "JsafeJCE"); –
Explosión no funcionó: java.security.NoSuchProviderException: No hay tal proveedor: JsafeJCE – user291701
Parece que está intentando escribir código criptográfico arrojando fragmentos aleatorios de código en la pared y esperando que algo se pegue. Al usar las API de bajo nivel, se supone que comprende cosas como la diferencia entre la criptografía simétrica y la asimétrica, las diferencias entre los modos de cifrado de bloques y los esquemas de relleno, IV, etc. Parece que no entiendes ninguno de esos. Quizás es allí donde deberías comenzar. –