如何使用密码Hashigh库

问题描述 投票:0回答:1

这是使用密码hashigh库的建议方法:

var generator = new PBKDF2();
var salt = Salt.generateAsBase64String(6); // every time is different
var hash = generator.generateKey("mytopsecretpassword", salt , 1000, 32);

[如果以后每次盐都不同,因此哈希也不同,我以后如何检查哈希是否为真?相反,如果我设置一个恒定的盐,那将是不安全的,因为我们应该在代码中保留该值。

dart password-hash
1个回答
0
投票

请参见How to store salt?

  • 为每个密码生成唯一的盐
  • 盐通常存储在数据库中
    • 即使攻击者获得了密码和盐,他们仍然需要破解密码,并且不能使用彩虹表。
  • 不要在代码中保持不变的盐,但是您可以使用Pepper-所有密码共有的附加值,并与salt一起使用

现在,由于盐的目的只是为了防止创建预先生成的数据库,因此不需要在数据库中对其进行加密或隐藏。您可以将其以纯文本格式存储。目的是迫使攻击者一旦获得数据库就必须破解散列,而不是只能在彩虹表中查找散列。

但是,有一个警告。如果攻击者在闯入数据库之前可以悄悄地获取盐分,例如通过一些向任何需要盐的人提供盐的脚本,他可以像没有盐一样轻松地为该盐生成彩虹表。这意味着他可以默默地使用您的管理员帐户的费用,生成一个漂亮的大彩虹表,然后入侵您的数据库并立即以管理员身份登录。这使您没有时间发现已发生违规行为,也没有时间采取行动来防止损坏,例如更改管理员密码/锁定特权帐户。这并不意味着您应该隐藏盐或尝试对其进行加密,而只是意味着您应设计系统,以使它们获取盐的唯一方法是闯入数据库。

© www.soinside.com 2019 - 2024. All rights reserved.