首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bcrypt-ruby密码生成和检查

bcrypt-ruby密码生成和检查
EN

Stack Overflow用户
提问于 2012-08-04 11:30:35
回答 1查看 2.1K关注 0票数 3

我正在试用bcrypt-ruby gem,我编写了以下代码来生成一个随机密码并对其进行验证

代码语言:javascript
复制
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)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-04 11:38:28

bcrypt具有自动加盐功能。你不能比较同一字符串的两个bcrypt,它们是不同的。

试着这样比较:

代码语言:javascript
复制
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是可行的。由于您将使用class String中的标准==,因此不会比较tok == enc

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11805678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档