我有一個JavaScript應用程序和一個Python應用程序,使用pbdkf2從密碼派生的密鑰進行通信。問題是,生成的密鑰不匹配。我爲每個人製作了一個最小的測試用例。如何使SJCL和Python hashlib生成相同的pdkdf2輸出
的Python
import hashlib, binascii
bytes = hashlib.pbkdf2_hmac('sha256', "password".encode(), b'', 100000)
print(binascii.hexlify(bytes).decode())
生成:64a868d4b23af696d3734d0b814d04cdd1ac280128e97653a05f32b49c13a29a
的JavaScript
<script src="lib/sjcl.js"></script>
<script>
var hmacSHA256 = function (key) {
var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha256);
this.encrypt = function() {
return hasher.encrypt.apply(hasher, arguments);
};
};
hash = sjcl.misc.pbkdf2("password", [0], 100000, 256, hmacSHA256);
console.log(sjcl.codec.hex.fromBits(hash));
</script>
生成:41c04f824d843d5be0ae66b3f621d3f05db7d47e7c46ee0e9171b5cbff7f3631
我現在很抓我的頭。我認爲b''
和[0]
是等效鹽,但我不確定。我認爲他們都使用utf-8來編碼密碼,但我不確定。而且我不相信JavaScript hmacSHA256函數完全符合Python正在做的事情。或者它可能還是其他的東西。