저는 BCrypt를 실험 해본 결과 다음을 발견했습니다. 이 중요한 경우에, 나는 처음에는 루비 1.9.2dev (2010-04-30 트렁크 27557)는 i686 - 리눅스]BCrypt는 오랫동안 유사한 암호가 동일하다고 말합니다. 나, 보석 또는 암호화 분야에 문제가 있습니까?
require 'bcrypt' # bcrypt-ruby gem, version 2.1.2
@long_string_1 = 'f287ed6548e91475d06688b481ae8612fa060b2d402fdde8f79b7d0181d6a27d8feede46b833ecd9633b10824259ebac13b077efb7c24563fce0000670834215'
@long_string_2 = 'f6ebeea9b99bcae4340670360674482773a12fd5ef5e94c7db0a42800813d2587063b70660294736fded10217d80ce7d3b27c568a1237e2ca1fecbf40be5eab8'
def salted(string)
@long_string_1 + string + @long_string_2
end
encrypted_password = BCrypt::Password.create(salted('password'), :cost => 10)
puts encrypted_password #=> $2a$10$kNMF/ku6VEAfLFEZKJ.ZC.zcMYUzvOQ6Dzi6ZX1UIVPUh5zr53yEu
password = BCrypt::Password.new(encrypted_password)
puts password.is_password?(salted('password')) #=> true
puts password.is_password?(salted('passward')) #=> true
puts password.is_password?(salted('75747373')) #=> true
puts password.is_password?(salted('passwor')) #=> false
을 실행하는거야 내가 생각했던 암호가 특정 길이에 도착하면, 비 유사성는 것 모든 해싱에서 길을 잃었을뿐 아니라 매우 다른 경우 (즉 길이가 다른 경우) 서로 다른 것으로 인식 될 수 있습니다. 내가 해시 함수에 대해 알고있는 것으로부터 나에게 그럴듯하게 보이지는 않았지만 나는 더 나은 설명을 보지 못했다.
그런 다음 각 long_strings의 길이를 줄여서 BCrypt가 구별 할 수있는 위치를 시작하는 것을 보았습니다. 그리고 긴 문자열 각각을 100 자 정도로 줄이면 마지막 시도 ('passwor ')도 사실로 돌아 오기 시작할 것입니다. 그래서 지금 나는 무엇을 생각해야할지 모른다.
설명은 무엇입니까?
너무 긴 키가있을 때 bcrypt()가 NULL을 반환하는 문제를 해결할 수있을 것이라고 생각합니다. 또한, 이미 암호 구조에 소금이 있고 bcrypt가 염려스러운 보안 문제를 해결하려고 표면 상으로는 나 자신의 염분에 신경 쓰지 않을 것입니다. – HostileFork
'key_len '이 이런 짧은 타입 인 이유는 충분하지 않습니다. – caf
@caf - 웹에 많은 코드 줄이 있습니다. 그리고 불행히도 그 중 많은 부분이 좋은 이유에 의해 동기 부여를받지 못하는 것 같습니다. :) – HostileFork