Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python(django)和Javascript(crypto.js)中的PBKDF2哈希不一致_Javascript_Python_Django_Encryption_Cryptography - Fatal编程技术网

Python(django)和Javascript(crypto.js)中的PBKDF2哈希不一致

Python(django)和Javascript(crypto.js)中的PBKDF2哈希不一致,javascript,python,django,encryption,cryptography,Javascript,Python,Django,Encryption,Cryptography,Django代码: hasher = PBKDF2PasswordHasher() print hasher.encode(u'qwerty', u'qwerty', iterations=1).split('$')[3] # T9t/EJXFpPs2Lhca7IVGphTC/OdEloPMHw1UhDnXcyQ= # hex: 4fdb7f1095c5a4fb362e171aec8546a614c2fce7449683cc1f0d548439d77324 Javascript代码: var

Django代码:

hasher = PBKDF2PasswordHasher()
print hasher.encode(u'qwerty', u'qwerty', iterations=1).split('$')[3]
# T9t/EJXFpPs2Lhca7IVGphTC/OdEloPMHw1UhDnXcyQ=
# hex: 4fdb7f1095c5a4fb362e171aec8546a614c2fce7449683cc1f0d548439d77324
Javascript代码:

var key = CryptoJS.PBKDF2('qwerty', 'qwerty', { iterations: 1, keySize: 256/32 });
console.log(key.toString(CryptoJS.enc.Base64));
// vfBGfG30ahsx6QWs9vrdTGV+wmlg1d5f2+5bFnP5SAU=
// hex: bdf0467c6df46a1b31e905acf6fadd4c657ec26960d5de5fdbee5b1673f94805

我没有在JS中指定正确的哈希器。默认值是CryptoJS的SHA1哈希程序和Django的SHA526哈希程序

CryptoJS.PBKDF2('qwerty', 'qwerty', { iterations: 1, keySize: 256/32, hasher: CryptoJS.algo.SHA256 });

修复问题

您是否使用相同的salt?是的,正如您在上面看到的,salt是
qwerty
对于密码哈希,您应该至少重复10000次。您也不应该输出超过本机大小(SHA1为20字节,SHA256为32字节)多亏了CodeInChaos,我实际上使用它来进行键拉伸。我想要一个AES加密的256位密钥。此外,我同意迭代。为了测试的目的保持它们的小尺寸。我现在已经将它设置为5000,因为我希望它在移动浏览器上足够快。