如何设计商店和阅读盐/哈希?

时间:2014-11-07 23:55:13

标签: ruby-on-rails ruby devise

它是如何工作的,设计知道加密密码的盐?它在哪里存储这些哈希值以及它是如何安全的?

1 个答案:

答案 0 :(得分:1)

这是创建密码的主要文件之一:Devise::DatabaseAuthenticatable

Salt不存储在数据库中,它是由此C程序生成的字符串,由BCrypt::Engine.generate_salt()函数__bc_salt运行:

 prefix = "$2a$05$CCCCCCCCCCCCCCCCCCCCC.E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW"
 __bc_salt(prefix, cost, OpenSSL::Random.random_bytes(MAX_SALT_LENGTH))

这可以在这里找到: BCrypt::Engine

这里有一些其他有趣的代码:BCrypt::Password

从我可以收集的内容来看,salt本身就是加密密码中第三个$之后出现的29个字符。仅此一项无法告诉您密码,因为您还需要知道基于您的应用密钥的pepper(通常存储在您的/config/initializers/secret_token.rb中)

结论:为了解密密码,必须使用正确版本的BCrypt,从应用程序获取秘密令牌,并拥有加密密码,我认为此时用户密码是可能是您最不安全的问题,所以我觉得它非常安全。