Как добиться таких же результатов с PBKDF2WithHmacSha1 в JAVA и Swift - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь усилить пароль пользователя с помощью шифрования 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

...