나는 Coda Hale의 Ruby bcrypt library을 사용하고 있습니다. 나는 그것이 효과가 있다고 생각했던 것처럼 작동하지 않는다는 것을 최근에 알아 차렸다. 나는 적절한 절차이라고 생각했다 :Ruby의 bcrypt lib가 해시의 일반 텍스트로 소금을 포함하는 이유는 무엇입니까?
- 이 확보 암호
- 연결하여 소금과 해시 기능을 통해
- 그들을 해시 암호 문자열을 소금
- 를 생성
그러나 내가 bcrypt 함수의 결과를 볼 때 소금이 해시이 아니라 암호에 연결되어있는 것처럼 보입니다.. 소금 결합은 이전이 아닌 4 단계 이후에 일어납니다. 나는 코다 헤일이이 일을한다고 가정하고 있지만, 왜 이런 행동을하는지 궁금합니다.
다음은 간략한 IRB 세션으로 나에게 이상한 것을 보여줍니다. hash_secret
함수의 결과에서 첫 번째 29 개의 문자는 이고 소금은과 같습니다. 이것이 왜 그런지에 대한 정보는 인정 될 것입니다.
나의 유일한 이론은 salt가 별도의 DB 필드 (본질적으로 레코드 패킹 전략)에 저장할 필요가 없도록 해시에 과이 포함되어 있다는 것입니다.
irb#1(main):004:0> password_salt = BCrypt::Engine.generate_salt
=> "$2a$10$OrKdcWORLL8Gorhy9XR3UO"
irb#1(main):005:0> password='abc'
=> "abc"
irb#1(main):006:0> BCrypt::Engine.hash_secret(password, password_salt)
=> "$2a$10$OrKdcWORLL8Gorhy9XR3UOY8Sebzq92m7r02XPitzoazPdO7tmsEO"
irb#1(main):007:0>
소금을 해시와 별도로 저장할 필요가 없도록 만듭니다. 소금은 암호와 연결되어 해시를 생성하지만 소금은 해시를 테스트하는 데 단일 문자열 만 필요하도록 해시에 추가로 연결됩니다 (해시 알고리즘에 대한 다른 메타 데이터와 함께). –
또한 [bcrypt에는 내장 소금이 있습니까?] (http://stackoverflow.com/questions/6832445/how-can-bcrypt-have-built-in-salts/6833165#6833165), 아마도 더 좋을 것입니다. 의지. –
@MichaelBerkowski - agree -이 질문을하기 전에 두 번째 질문 (검색을 했어!)을 보았 으면합니다. 내 특정 질문에 대답 이후 중복으로 표시하도록 투표했습니다. –