正如您在下面看到的,我的php實現產生與JS版本不同的密鑰(如果這有什麼區別,在Extend Script上運行)。 PHP方面使用默認hash_pbkdf2,JS方使用CryptoJS庫。兩者都使用SHA256。PBKDF2(php)產生與CryptoJS.PBKDF2(js)不同的輸出
我在這裏錯過了什麼嗎?
PHP側
$salt = CryptoLib::randomString(128/8);
$password = "test";
$hasher = "sha256";
$iterations = 1000;
$outsize = 256;
$key = hash_pbkdf2($hasher, $password, $salt, $iterations, $outsize/8, true);
$key = bin2hex($key);
鹽輸出: 523554455475374b5942304448317468
密鑰輸出: cfb478a18d08030fe97beed34fd2da3abf89bb7975ffdaae9e39102a3b2ea1a2
JS側
var salt = "523554455475374b5942304448317468";
var password = "test";
var iterations = 1000;
var keySize = 256;
var key = CryptoJS.PBKDF2(password, salt, {keySize: 256/32, iterations: 1000, hasher:CryptoJS.algo.SHA256});
密鑰輸出: 1264aa07aeab3cf93d4ee86a074697165efffe4914ce98e6d6efd7f28c371b97
您可能應該使用[PBKDF2測試向量](https://www.ietf.org/rfc/rfc6070.txt)來查看它們中是否有任何產生正確結果。 – jww
在PHP實現中的鹽總是一個隨機的字符串,並在js中使用常量作爲鹽;你只是沒有提供相同的輸入到計算功能。或者我錯過了什麼? –
鹽產生一次(523554455475374b5942304448317468),然後採取JS(抱歉,我應該在原來的帖子中指出)。當然,如果我重新運行PHP,如果將創建一個新的鹽,這將不得不再次導入到JS。 – tombalev