在ruby中使用散列密码

kmo*_*511 5 ruby security

在前面,我想承认自己是加密和密码安全的全新手.我正在尝试将密码存储在ruby的babysat数据库中.我的理解是明文密码应该附加到一个随机的"salt"中,整个短语应该通过一些散列算法进行散列,例如:

    Digest::SHA1.hexdigest(salt_plus_plainpassword)
Run Code Online (Sandbox Code Playgroud)

一旦该字符串存储在数据库中,如果有一个现在未知的随机盐附加到该数据库,如何再次获取它以验证用户输入的内容是否正确?

nit*_*der 6

最好的方法是将salt存储为每个用户一个,并根据他们执行时的时间生成.

确实,一旦一个人访问您的数据库,他们就可以看到用户的盐,但如果发生这种情况,您需要担心更大的问题.

检查用户密码的方法是,您使用明文输入并使用salt加密,然后比较crypted_pa​​sswords,如果它们匹配则进行身份验证.我不相信存储盐是一个问题,因为你需要它.如果您担心SQL注入攻击,最好不要保护您的应用程序,而不是存储您需要的信息,在这种情况下,每个用户都会使用.

  • 详细说明:存储盐不是问题,因为它的唯一目的是使您免受对彩虹表的攻击.由于散列是不可逆转但可预测的,攻击者只需查看预先计算的常用密码哈希值,就可以从未加盐的哈希值中找出密码.重新说一下:猜测并列出sha1("你好")[1]的结果很容易,猜测sha1("hello"+ salt())的结果真的很难.[1]它是:aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d,所以每当我发现在无盐数据库中,我都知道密码. (2认同)