www pbkdf2withhmacsha1 online freeformatter crypto java cryptography bouncycastle pbkdf2

pbkdf2withhmacsha1 - Implementación confiable de PBKDF2-HMAC-SHA256 para JAVA



pbkdf2withhmacsha1 online (3)

Está disponible en Java 8:

public static byte[] getEncryptedPassword( String password, byte[] salt, int iterations, int derivedKeyLength ) throws NoSuchAlgorithmException, InvalidKeySpecException { KeySpec spec = new PBEKeySpec( password.toCharArray(), salt, iterations, derivedKeyLength * 8 ); SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); return f.generateSecret(spec).getEncoded(); }

¿Existe alguna implementación confiable de PBKDF2-HMAC-SHA256 para JAVA?

Solía ​​encriptar usando bouncycastle pero no proporciona PBKDF2WithHmacSHA256 ''.

No quiero escribir el módulo criptográfico por mi cuenta.

¿Podría recomendar alguna biblioteca o algoritmo alternativo (si puedo seguir con bouncycastle)?

(Aquí están los algoritmos que soporta bouncycastle) http://www.bouncycastle.org/specifications.html


Usando las clases de BouncyCastle directamente:

PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator(new SHA256Digest()); gen.init("password".getBytes("UTF-8"), "salt".getBytes(), 4096); byte[] dk = ((KeyParameter) gen.generateDerivedParameters(256)).getKey();


Usando spongycastle (java en android)

Reemplace spongycastle con bouncycastle si está usando bouncycastle en java directamente

import org.spongycastle.crypto.generators.PKCS5S2ParametersGenerator; import org.spongycastle.crypto.digests.SHA256Digest; import org.spongycastle.crypto.params.KeyParameter; public class Crypto { public String pbkdf2(String secret, String salt, int iterations, int keyLength) { PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator(new SHA256Digest()); byte[] secretData = secret.getBytes(); byte[] saltData = salt.getBytes(); gen.init(secretData, saltData, iterations); byte[] derivedKey = ((KeyParameter)gen.generateDerivedParameters(keyLength * 8)).getKey(); return toHex(derivedKey); } private static String toHex(byte[] bytes) { BigInteger bi = new BigInteger(1, bytes); return String.format("%0" + (bytes.length << 1) + "x", bi); } }