bcrypt-ruby密码生成和检查

时间:2012-08-04 03:30:35

标签: ruby bcrypt

我正在尝试使用bcrypt-ruby gem,我编写了以下代码来生成随机密码并验证它

require 'bcrypt'
require 'securerandom'

def encrypt_token(tok)
    BCrypt::Password.create(tok)
end

def check_token(enc,tok)

    g = BCrypt::Password.new(enc)

    if tok==g
       puts 'equal'
    else
       puts 'not equal'
    end 
end

s = SecureRandom.hex(12)

puts s

e = encrypt_token(s)

puts e

check_token(e,s)

代码保持打印“不相等”而不是“相等”。我哪里错了?谢谢:)

1 个答案:

答案 0 :(得分:3)

bcrypt具有自动盐功能。你无法比较同一个字符串的两个bcrypts,它们会有所不同。

尝试比较如下:

def check_token(enc,tok)

  if enc == tok #We compare it with the unencrypted string.
    puts 'equal'
  else
    puts 'not equal'
  end 

end

诀窍在于,在创建新的bcrypt时,最终会得到一个覆盖==运算符的Password对象。它会根据未加密的字符串检查密码是否正确。

同样正因为如此,请注意:在上面的示例中,比较enc == tok有效。 比较tok == enc不会,因为您将使用==

中的标准class String

在这里查看文档和来源: http://bcrypt-ruby.rubyforge.org/