Meteor,为什么哈希后密码相同,不同的字符串存储在数据库中

时间:2016-03-01 06:09:06

标签: meteor hash passwords sha256

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

1 个答案:

答案 0 :(得分:2)

根据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 - 用下面的盐对河豚进行散列:“$ 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 $字符串,并从中提取盐。