我正在尝试使用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个...大声笑