es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PBKDF2 con Sha256 en Android 5

Estoy haciendo una aplicación de Android que utiliza PBKDF2 con Hmac Sha256. Implementé la función, pero cuando la pruebo en un dispositivo Android 5.0, me da un error de NoSuchAlgorithmException. ¿Cómo puedo implementar manualmente PBKDF2 para Android 5.0?

Estoy utilizando esto para la encriptación PBKDF2 y AES 256:

@RequiresApi(api = Build.VERSION_CODES.O)
public static String encrypt(String strToEncrypt, String SECRET_KEY, String SALT) {
    try {
        byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        IvParameterSpec ivspec = new IvParameterSpec(iv);

        SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
        KeySpec spec = new PBEKeySpec(SECRET_KEY.toCharArray(), SALT.getBytes(), 100000, 256);
        SecretKey tmp = factory.generateSecret(spec);
        SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(), "AES");

        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivspec);
        return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8)));
    } catch (Exception e) {
        System.out.println("Error mientras se encriptaba: " + e.toString());
    }
    return null;
}

¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Si está obteniendo NoSuchAlgorithmException cuando intenta usar PBKDF2WithHmacSHA256 en un dispositivo Android 5.0, significa que el algoritmo no es compatible con esa versión de Android.

    Una forma de implementar PBKDF2 manualmente en Android 5.0 es utilizar una biblioteca externa que admita el algoritmo. Bouncy Castle es una opción popular para esto, ya que admite una amplia gama de algoritmos criptográficos que no están nativamente admitidos por Android.

    Para usar Bouncy Castle, deberá agregar la siguiente dependencia a su archivo app/build.gradle:

    implementation 'org.bouncycastle:bcprov-jdk15on:1.68'
    

    Luego, puede modificar su código para usar la implementación de PBKDF2 de Bouncy Castle de la siguiente manera:

    byte[] salt = SALT.getBytes();
    int iterations = 100000;
    int keySize = 256;
    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WITHHMACSHA256", "BC");
    KeySpec spec = new PBEKeySpec(SECRET_KEY.toCharArray(), salt, iterations, keySize);
    SecretKey tmp = factory.generateSecret(spec);
    SecretKeySpec secretKeySpec = new SecretKeySpec(tmp.getEncoded(), "AES");
    

    Esto debería permitirle usar PBKDF2WithHmacSHA256 en dispositivos Android 5.0.

Comments are closed.