在 Node.js 中生成和验证密码哈希与 Python 的 werkzeug 相同

Generating and Verifying password hashes in Node.js same as Python's werkzeug

我正在将一个应用程序从 Python Flask 迁移到 ExpressJS。 我需要一些密码散列和验证方面的帮助。 在 Flask 中,你可以这样做:

from werkzeug import generate_password_hash, check_password_hash
pass = 'abcd'
pass_hash = generate_password_hash(pass)
check_password_hash(pass_hash, pass)

并且在 4 行中你有一个布尔响应检查密码是否对应于哈希。

现在转到 NodeJS:我知道如何创建 sha256 哈希、HMAC 哈希或密码,但我该如何检查密码?

在node中也很容易实现。使用 https://github.com/ncb000gt/node.bcrypt.js/ 这是 koa 的例子。

let bcrypt = require('co-bcrypt');

let storedHash = yield bcrypt.hash("user_password", 10, null);   // to get hash

let isValid = yield bcrypt.compare("user_password", storedHash);  // to compare

如果您想使用 pbkdf2,这里是另一个示例。

const crypto = require('crypto');
crypto.pbkdf2('secret', 'salt', 100000, 512, 'sha512', (err, key) => {
  if (err) throw err;
  console.log(key.toString('hex'));  // 'c5e478d...1469e50'
});

文档:https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback