首先,我想承认我是密码学和密码安全方面的新手。我正在尝试将密码存储在由 ruby 提供的 babysat 数据库中。我的理解是明文密码应该附加到一个随机的“盐”上,并且整个短语应该通过一些散列算法进行散列,例如:
Digest::SHA1.hexdigest(salt_plus_plainpassword)
一旦该字符串存储在数据库中,如果附加了现在未知的随机盐,如何再次将其取出来验证用户输入的内容是否正确?
最佳答案
最好的方法是为每个用户存储一个盐,它是根据他们执行操作时的时间生成的。
确实,一旦有人可以访问您的数据库,他们就可以看到用户的盐分,但如果发生这种情况,您就需要担心更大的事情。
检查用户密码的方法是获取他们的明文输入并用盐对其进行加密,然后比较 crypted_passwords,如果它们匹配则通过身份验证。我不认为储存盐是一个问题,因为您将需要它。如果您担心 SQL 注入(inject)攻击,您最好保护您的应用程序免受它们的攻击,而不是不存储您需要的信息,在这种情况下每个用户都加盐。
关于ruby - 在 ruby 中使用散列密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/933199/