Python(django)和Javascript(crypto.js)中的PBKDF2哈希不一致
Django代码: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
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,因为我希望它在移动浏览器上足够快。