Я пытаюсь усилить пароль пользователя с помощью шифрования PBKDF2WithHmacSHA1, чтобы получить случайную соль и хэш. Успешно выполнив это в JAVA и SWIFT, я получаю два разных результата разной длины. в Java я создаю хэш длиной около 44-48 символов. В Swift я создаю хеш длиной 528 символов.
Я пытался следовать совету из этого поста, PBKDF2WithHmacSHA1 Java to Swift 3 , но все еще не получил желаемую длину.
КОД JAVA
SecretKeyFactory key = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
byte[] hashedPassword = key.generateSecret(spec).getEncoded();
DebugLog.logd("Tools","hashPassword tableau bytes = " + hashedPassword);
return toHex(hashedPassword).getBytes();
с методом toHex (), предоставленным постом выше
private static String toHex(byte[] array) {
BigInteger bi = new BigInteger(1, array);
String hex = bi.toString(16);
int paddingLength = (array.length * 2) - hex.length();
if(paddingLength > 0)
return String.format("%0" + paddingLength + "d", 0) + hex;
else
return hex;
}
SWIFT 3 код
let passwordArray: [UInt8] = Array(test.utf8)
let saltArray: [UInt8] = Array(salt.utf8)
let result = try! PKCS5.PBKDF2(password: passwordArray, salt: saltArray, iterations: iter, keyLength: 192, variant: .sha1).calculate()
Я ожидаю получить хеш-функцию равной длины. в тестовых целях я использую одну и ту же соль в обоих случаях, чтобы попытаться получить одинаковые результаты. в любом случае с Java получится 44-48 символов, а с быстрым - 528 символов. есть ли в любом случае, я могу изменить быстрый код, чтобы получить результирующий хэш, равный хешу результата Java. любая помощь будет оценена
примечание: В посте выше, ОП использовал длину ключа 192, а я использовал длину ключа 256. Я также попытался прокомментировать и задать вопрос на оригинальный пост, но у меня недостаточно репутации, чтобы сделать это. Мне нужно 50, и у меня есть 3 ... LOL