我必须在基于文本文件的数据库中以加密形式存储密码,以使系统安全。
我正在寻找可能的解决方案。我研究了基于哈希的算法,如MD5和bcrypt。发现建议使用bcrypt而不是MD5。我对这些算法中的方法感到担忧:
我仍然认为哈希的存在是一个值得关注的问题。此外,算法使散列字符串中盐的位置公开。所以根据这种格式,我们有:
$ $ bcryptid $ log_rounds 128位-Salt184位散列
如果黑客想破坏其中一个帐户该怎么办?他/她可以读取该帐户的SALT,使用密码尝试运行bcrypt加密功能,并与数据库中的字符串HASHED进行比较。
请将以下内容视为伪代码:
for password_attempt in LIST_OF_POSSIBLE_PASSWORDS
if (hashpw(password_attempt, SALT ) == HASHED)
print "Hacker wins! I guessed a password!", password_attempt
我看到bcrypt会让hashpw变慢,但是当它在数据库中的散列字符串中确定为明文时,我没有看到使用salt。 api应该在HASHED中破坏SALT,这样黑客就无法读取它。我想它没有这样做,或者我在这里错过了什么?
答案 0 :(得分:0)
如果你有足够好的随机哈希值,那么攻击者就必须使用暴力破解程序,这样做效率很低,并且可能需要比宇宙生命周期更长的时间才能破解。
如果你不使用randomely生成的哈希,它会大大减少破解的时间。还有rainbow tables 那不用盐。如果你有盐,你就不能使用预先计算的哈希值。