PBKDF2 с упругим замком в Java
Я пытаюсь надежно сохранить пароль в базе данных и для этого я решил сохранить его хэш, сгенерированный с использованием функции PBKDF2. Я хочу сделать это с помощью библиотеки надувных замков, но я не знаю, почему я не могу заставить ее работать с помощью интерфейса JCE ... Проблема в том, что генерация хэша в 3 различных режимах:
1. используя фабрику секретных ключей PBKDF2WithHmacSHA1, предоставленную Sun
2. используя бодрый замок API непосредственно
3. используя надувной замок через JCE
приводит к двум различным значениям: одно общее для первых двух и одно для третьего.
Вот мой код:
//Mode 1
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec keyspec = new PBEKeySpec("password".toCharArray(), salt, 1000, 128);
Key key = factory.generateSecret(keyspec);
System.out.println(key.getClass().getName());
System.out.println(Arrays.toString(key.getEncoded()));
//Mode 2
PBEParametersGenerator generator = new PKCS5S2ParametersGenerator();
generator.init(PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(("password").toCharArray()), salt, 1000);
KeyParameter params = (KeyParameter)generator.generateDerivedParameters(128);
System.out.println(Arrays.toString(params.getKey()));
//Mode 3
SecretKeyFactory factorybc = SecretKeyFactory.getInstance("PBEWITHHMACSHA1", "BC");
KeySpec keyspecbc = new PBEKeySpec("password".toCharArray(), salt, 1000, 128);
Key keybc = factorybc.generateSecret(keyspecbc);
System.out.println(keybc.getClass().getName());
System.out.println(Arrays.toString(keybc.getEncoded()));
System.out.println(keybc.getAlgorithm());
Я знаю, что PBKDF2 реализован с использованием HMAC SHA1, поэтому я выбрал в качестве алгоритма в последнем методе «PBEWITHHMACSHA1», который я взял из документации по bouncy castle java.
Вывод следующий:
com.sun.crypto.provider.SunJCE_ae
[-53, 29, 113, -110, -25, 76, 115, -127, -64, 74, -63, 102, 75, 81, -21, 74]
[-53, 29, 113, -110, -25, 76, 115, -127, -64, 74, -63, 102, 75, 81, -21, 74]
org.bouncycastle.jce.provider.JCEPBEKey
[14, -47, -87, -16, -117, -31, 91, -121, 90, -68, -82, -31, -27, 5, -93, -67, 30, -34, -64, -40]
PBEwithHmacSHA
Есть идеи?