给定这个 php:
$hash = hash('sha512', $salt . $password, TRUE);
/* point A */
$hash = hash('sha512', $hash . $password, TRUE);
/* point B */
我写了这个 JavaScript:
let hash = crypto.createHash('sha512');
hash.update(salt + password);
let buffer = hash.digest();
/* point A */
hash = crypto.createHash('sha512');
hash.update(buffer.toString() + password);
buffer = hash.digest();
/* point B */
对于所有盐和密码字符串,A 缓冲区在 PHP 和 Javascript 中具有相同的值。但在 B 点,它们是不同的,所以我第二次调用 hash.update 时出现了问题。任何建议表示赞赏。
最佳答案
好吧,我想我已经明白了。
let hash = crypto.createHash('sha512');
hash.update(salt + password);
let buffer = hash.digest();
/* point A */
hash = crypto.createHash('sha512');
hash.update(Buffer.concat([buffer, Buffer.from(password)]));
buffer = hash.digest();
/* point B */
关于这段 php 代码片段的 javascript 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61663229/