它是如何工作的,设计知道加密密码的盐?它在哪里存储这些哈希值以及它是如何安全的?
答案 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,从应用程序获取秘密令牌,并拥有加密密码,我认为此时用户密码是可能是您最不安全的问题,所以我觉得它非常安全。