【问题标题】:Meteor,why same password after hashing, different string stored in databaseMeteor,为什么哈希后密码相同,数据库中存储的字符串不同
【发布时间】:2016-06-13 10:54:18
【问题描述】:

我发现 Meteor 默认使用 sha-256 来哈希密码。但我很困惑散列后每个帐户的相同密码成为存储在数据库中的不同字符串。任何人都会告诉详细的实现,thx

【问题讨论】:

  • 这是因为盐,每个密码应该是唯一的。希望这不是单一的 SHA256,因为这对于存储密码不安全,推荐使用 BCrypt、PBKDF2 或 SCrypt。
  • 我认为 Meteor-Accounts 包使用 bcrypt
  • @martinstoeckli 我想知道盐的确切值,盐是什么,它可能是动态值或数据库表字段。然后我可以自己实现在另一个系统中进行集成

标签: meteor hash passwords sha256


【解决方案1】:

根据 Meteor 文档,accounts-password uses bcrypt

如果你查看loginWithPassword的源代码,你应该可以找到盐的存储位置。作为第二个来源,请阅读 MasterAM 的 answer to Laravel & Meteor password hashing,这表明从 2011 年开始的 Meteor 使用 $2y$ hash strings, i.e. PHP CRYPT_BLOWFISH,它使用

CRYPT_BLOWFISH - Blowfish 使用盐散列如下:“$2a$”、“$2x$”或“$2y$”、两位数的成本参数“$”和字母表中的 22 个字符“./ 0-9A-Za-z”。在 salt 中使用超出此范围的字符将导致 crypt() 返回零长度字符串。两位数的成本参数是底层基于 Blowfish 的散列算法的迭代计数的以 2 为底的对数,必须在 04-31 范围内,超出此范围的值将导致 crypt() 失败。 5.3.7 之前的 PHP 版本仅支持“$2a$”作为 salt 前缀:PHP 5.3.7 引入了新前缀以修复 Blowfish 实现中的安全漏洞。请参阅 » 此文档以了解安全修复的完整详细信息,但总而言之,仅针对 PHP 5.3.7 及更高版本的开发人员应优先使用“$2y$”而不是“$2a$”。

因此,在数据库中查找 $2y$ 字符串,并从中提取盐。

【讨论】:

  • 非常感谢。你的回答让我知道 bcrypt 是如何工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 2021-09-21
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
相关资源
最近更新 更多