Java和JavaScript PBKDF2长度不一致

问题描述 投票:0回答:1

我正在尝试将一些Java代码移植到JavaScript。但是,由于某种原因,我的长度不一致。某些信息告诉我NodeJS库crypto无法按预期工作。

哈希Java文件

public class hash {
    public static void main(String[] args){
        try {
            String password = "password1";

            //random bytes (should be random)
            byte[] bArr = {0, 1, 2, 3, 4, 5, 6, 7};

            char[] salt = password.toCharArray();

            PBEKeySpec spec = new PBEKeySpec(salt, bArr, 100, 384);

            byte[] encoded = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1").generateSecret(spec).getEncoded();

            System.out.println(encoded.length);
        } catch(Exception e) {}
    }
}

打印的输出为48,由于SHA-384,这很有意义。但是,我的JavaScript代码输出带有384元素的数组。

JavaScript文件

const crypto = require("crypto");

const key = "password1";

let bArr = [0, 1, 2, 3, 4, 5, 6, 7];

//create the salt (.toCharArray() in Java)
const salt = key.split("").join(",");

let encoded = crypto.pbkdf2Sync(key, Buffer.from(salt, "hex"), 100, 384, "sha1");

console.log(encoded.length);

我不确定我在做什么错。我发现了几个地方,人们在这里讨论如何创建PBKDF2密钥,看来这就是我应该做的。另外,我的JavaScript示例中未使用bArr

我已经尝试将两个encoded变量都转换为十六进制以进行比较,但是JavaScript变量要长得多。即使我将密钥长度缩短为48(在384 -> 48方法中为pbkdf2Sync()),也仍然是错误的。

javascript java cryptojs pbkdf2
1个回答
0
投票

我面临着同样的问题:-(用Java生成的Salt哈希与用javascript生成的Salt哈希不同。在Java中,我使用的算法为“ PBKDF2WithHmacSHA512”,而在JavaScript中,摘要为“ SHA512”,不确定两者的实现是否相同。

© www.soinside.com 2019 - 2024. All rights reserved.