bcrypt盐可以单独访问吗?

10

在Rails 3.1中使用has_secure_password时,bcrypt会为每个用户的密码随机生成一串盐值。根据这个回答,我了解到盐值与密码哈希值一起存储。是否有可用的方法或属性可以单独访问该盐值,例如用于编写安全cookie?

1个回答

15

如果你需要,你可以获取盐和校验和。

gem install bcrypt-ruby
irb
require 'bcrypt'

hash = BCrypt::Password.create 'superpass'
=> "$2a$10$DtjuZD6nJtrBRLEySlSVm.bJyBMhEhVRAeiVk/GjmQdBNf7WhmDWi"
hash.salt
=> "$2a$10$DtjuZD6nJtrBRLEySlSVm."
hash.checksum
"bJyBMhEhVRAeiVk/GjmQdBNf7WhmDWi"
hash == "starbucks"
=> false
hash == "superpass"
=> true

你的盐和校验和将会不同。

更多信息: https://github.com/codahale/bcrypt-ruby


2
谢谢!考虑到这一点,再加上查看Rails的secure_password模型,我能够确定我需要为我的代码编写一个方法(以便整洁地访问盐)。def salt @salt ||= BCrypt::Password.new(password_digest).salt end非常完美! - joanwolk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接