如何在JAVA和Swift中使用PBKDF2WithHmacSha1获得相同的结果

时间:2019-01-06 01:08:45

标签: java android ios swift pbkdf2

我正在尝试使用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结果相等的结果哈希值。任何帮助将不胜感激

边注: 在上面的帖子中,OP使用的密钥长度为192,而我使用的密钥长度为256。我也尝试过评论并询问在原始帖子上的一个问题,但我没有足够的声誉。我需要50个,我有3个...大声笑

0 个答案:

没有答案