2012-08-04 2 views
3

내가 bcrypt - 루비 보석을 시도하고 있었다 확인이 난 임의의 암호를 생성하고bcrypt 루비 암호 생성 및

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

참고. 다음과 같이 간단하게해야합니다 :'def encrypt_token (tok); BCrypt :: Password.create (tok); end' – Phrogz

+0

죄송합니다, 저는 루비를 처음 접했습니다. 아직 코딩 규칙을 배우고 있습니다. –

답변

3

bcrypt에는 자동 소금 기능이 있습니다. 같은 문자열의 두 개의 bcrypt를 비교할 수는 없습니다. 서로 다릅니다.

는 다음과 같이 비교하십시오 :

def check_token(enc,tok) 

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

end 

트릭은 새로운 bcrypt를 만들 때, 당신은 == 연산자를 재정의하는 암호 객체로 끝날 것입니다. 암호가 암호화되지 않은 문자열과 맞는지 확인합니다.

또한 위의 예에서는 enc == tok과 비교하여주의해야합니다. 비교 tok == enc하지 않습니다 당신이 문서에서 모양과 여기 소스 타고 class String

에서 표준 ==을 사용할 것 같은 : 당신의`encrypt_token` 방법은 매우 관용적하지 http://bcrypt-ruby.rubyforge.org/