5

请帮助 php -> javascript(node.js) 转换

$key = crypt($key, $salt);

我正在用 node.js 重写 php 脚本,我被 php 中的哈希签名生成困住了,这是使用 crypt() 函数和盐匹配“CRYPT_EXT_DES”模式制作的

CRYPT_EXT_DES - 扩展的基于 DES 的散列。“salt”是一个 9 字符的字符串,由一个下划线后跟 4 个字节的迭代计数和 4 个字节的 salt 组成。这些被编码为可打印字符,每个字符 6 位,最低有效字符在前。值 0 到 63 被编码为“./0-9A-Za-z”。在 salt 中使用无效字符会导致 crypt() 失败。

我对加密并没有真正的经验,在加密模块上研究 node.js 文档并没有帮助。请帮助如何在 node.js 上实现它!

4

2 回答 2

0

看起来crypt(3)库应该可以工作。

例如:

const crypt = require( 'crypt3/sync' ),
      key = "password",
      hash = crypt( key, crypt.createSalt( 'sha512' ) );

然后测试存储的哈希...

const crypt = require( 'crypt3/sync' ),
      key = "password",
      hash = /* stored hash */;

if ( crypt( key, hash ) !== hash ) {
  // access denied
  return false;
}

(晚了六年,我知道)

于 2019-06-14T02:13:43.740 回答
0

你可以用https://github.com/thomas-alrek/node-php-password做到这一点

var Password = require("node-php-password");

var options = {
    cost: 10,
    salt: "qwertyuiopasdfghjklzxc"
};
const hashedPassword = Password.hash(password, "PASSWORD_DEFAULT", options);

这将与 php 中的结果相同

crypt(password,'$2y$10$'.'qwertyuiopasdfghjklzxc'.'$')
于 2020-07-17T13:00:57.717 回答