Skip to content

Latest commit

 

History

History
30 lines (22 loc) · 1.58 KB

bcryptpasswords.chinese.md

File metadata and controls

30 lines (22 loc) · 1.58 KB

对于密码,避免使用Node.js的Crypto库,使用Bcrypt

一段解释

当存储用户密码的时候,建议使用bcrypt npm module提供的自适应哈希算法bcrypt,而不是使用Node.js的crypto模块。由于Math.random()的可预测性,它也不应该作为密码或者令牌生成的一部分。

相较于JavaScript实现,bcrypt或者类似的模块应该被使用。当使用bcrypt时,可以指定相应数量的回合数(rounds),以提供安全的哈希。这将设置work factor或者用于数据处理的回合次数,而更多的哈希回合次数导致更安全的哈希值(尽管这是CPU耗时的代价)。哈希回合(hashing rounds)的引入意味着蛮力因子会显著降低, 因此密码破解会减慢, 从而增加产生一次尝试所需的时间。

代码示例

// 使用10个哈希回合异步生成安全密码
bcrypt.hash('myPassword', 10, function(err, hash) {
  // 在用户记录中存储安全哈希
});

// 将提供的密码输入与已保存的哈希进行比较
bcrypt.compare('somePassword', hash, function(err, match) {
  if(match) {
   // 密码匹配
  } else {
   // 密码不匹配
  } 
});

其他博客作者的说法

摘自博客Max McCarty:

... 它不只是使用正确的哈希算法。我已经广泛讨论了正确的工具,包括必要的成分"时间",如何作为密码哈希算法的一部分, 以及它对于试图通过蛮力破解密码的攻击者,意味着什么。