Node.js密码哈希bcrypt替代使用encryption

我实际上使用bcrypt模块来散列和比较哈希密码。

我想要做的是删除bcrypt模块,并使用默认crypto库散列和比较密码。

这可能吗?

这会比使用node-bcrypt更安全吗?

你有任何示例/教程/文档/链接如何做?

或者我正在做这样的事实:

 bcrypt.hash(string,secret_key) bcrypt.compare(string,string,secret_key); 

如果可能的话,我只想复制这个encryption:

 crypto.hash(string,secret_key) crypto.compare(string,string,secret_key); 

您可以使用encryption库中的pbkdf2进行散列:

 crypto.pbkdf2(password, salt, iterations, keylen, digest, callback) 

示例实现:

 const crypto = require('crypto'); crypto.pbkdf2('secret', 'salt', 100000, 512, 'sha512', (err, derivedKey) => { if (err) throw err; console.log(derivedKey.toString('hex')); // '3745e48...aa39b34' }); 

这里引用: https : //nodejs.org/api/crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback

它使用HMAC摘要algorithm(如sha512)从给定的密码,盐和迭代中导出给定长度的密钥。 Pbkdf2有类似bcrypt的缓慢function。 使用PBKDF2,bcrypt或scrypt,攻击者每秒只能进行几千次猜测(或更less,具体取决于configuration)。

bcrypt比crypto更安全,只是因为它比较慢。 然而,这里有一些密码函数,我使用crypto在coffeescript中编写(我使用'$'join了create_password部分,你会看到check_password中的分隔check_password ):

  create_password = function(passwd, method, salt) { var hmac; method || (method = "sha1"); salt || (salt = crypto.randomBytes(6).toString('base64')); hmac = crypto.createHmac(method, salt); hmac.end(passwd); return { hash: hmac.read().toString('hex'), salt: salt, method: method }; }; check_password = function(hashed, passwd) { var hash, hashp, method, salt, _ref; _ref = hashed.split("$"), method = _ref[0], salt = _ref[1], hashp = _ref[2]; hash = create_password(passwd, method, salt).hash; return hash === hashp; }; 

用法示例:

 passwd = "SOME STRING HERE" hash_parts = create_password(passwd) hashed = pwd_parts.method + "$" + pwd_parts.salt + "$" + pwd_parts.hash check_password(hashed, passwd) 

一个替代的bcryptjs。 这个概念和bcrypt一样,但没有依赖性,并且与bcrypt兼容。

https://github.com/dcodeIO/bcrypt.js

https://www.npmjs.com/package/bcryptjs

Interesting Posts