ruby - 在 ruby​​ 中使用散列密码

标签 ruby security

首先,我想承认我是密码学和密码安全方面的新手。我正在尝试将密码存储在由 ruby​​ 提供的 babysat 数据库中。我的理解是明文密码应该附加到一个随机的“盐”上,并且整个短语应该通过一些散列算法进行散列,例如:

    Digest::SHA1.hexdigest(salt_plus_plainpassword)

一旦该字符串存储在数据库中,如果附加了现在未知的随机盐,如何再次将其取出来验证用户输入的内容是否正确?

最佳答案

最好的方法是为每个用户存储一个盐,它是根据他们执行操作时的时间生成的。

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

检查用户密码的方法是获取他们的明文输入并用盐对其进行加密,然后比较 crypted_pa​​sswords,如果它们匹配则通过身份验证。我不认为储存盐是一个问题,因为您将需要它。如果您担心 SQL 注入(inject)攻击,您最好保护您的应用程序免受它们的攻击,而不是不存储您需要的信息,在这种情况下每个用户都加盐。

关于ruby - 在 ruby​​ 中使用散列密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/933199/

相关文章:

ruby-on-rails - Ruby on Rails : Operation now in progress - connect(2) would block

ruby - 如果存储桶中已存在确切文件,则不要上传到 aws s3

ruby - 如何使用 rbenv 在不使用 sudo 的情况下全局安装 gem?

javascript - 用 JavaScript 动态加载 JavaScript

python - 为什么 python decode 替换了编码字符串中的无效字节?

java - 这个简单的字符串转义可以防止任何 SQL 注入(inject)吗?

php - 如何在 php 中保护 php 在线编辑器?

php - 哪种加密算法最适合加密 cookie?

ruby - 替换 ruby 中括号之间的特定字符

ruby - 用 nil 填充堆栈并将 "top"解释为最后一个非 nil 值是否有一些优势?