流星,散列后为什么同一个密码,在数据库中存储不同的字符串

问题描述:

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

+1

这是因为盐,每个密码都应该是唯一的。希望这不是一个单一的SHA256,因为这将不安全的存储密码,建议BCrypt,PBKDF2或SCrypt。 – martinstoeckli

+0

流星帐户包使用bcrypt我认为 –

+0

@martinstoeckli我想知道盐的确切值,盐与什么,它可能是一个动态值或数据库表字段。然后我可以在另一个系统中自己实现它进行整合 –

根据流星文档,accounts-password uses bcrypt

如果你看loginWithPassword的源代码,你应该能够找出盐的存储位置。作为第二个源,读MasterAM的answer to Laravel & Meteor password hashing这表明流星从2011上的用途$2y$ hash strings, i.e. PHP CRYPT_BLOWFISH,它使用

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

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

+0

非常感谢。你的回答让我知道bcrypt是如何工作的。 –