2008-11-10 3 views
173

bCrypt's javadoc 암호를 암호화하는 방법에 대한 코드는 다음과 같습니다.bcrypt로 소금을 저장해야합니까?

String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); 

일반 텍스트 암호가 이전에 해시 된 암호와 일치하는지 확인하려면

if (BCrypt.checkpw(candidate_password, stored_hash)) 
    System.out.println("It matches"); 
else 
    System.out.println("It does not match"); 

이러한 코드 단편은 무작위로 생성 된 소금이 버려진다는 것을 나에게 들려 준다. 이 경우입니까, 아니면 단지 오도 된 코드 조각입니까?

답변

201

소금은 해시에 통합됩니다 (base64 스타일 형식으로 인코딩 됨).

예를 들어, 전통적인 Unix 암호에서 소금은 암호의 처음 두 문자로 저장되었습니다. 나머지 문자는 해시 값을 나타냅니다. checker 함수는 이것을 알고 해시를 분리하여 소금을 꺼냅니다.

+58

소금은 암호에 포함되어 있습니다. 따라서 소금을 저장할 필요가 없습니다. –

+2

고마워요. 나는 그들이 javadoc에서 그랬 으면 좋겠다 :) (내가 소스를 확인해 봤는데 -하지만 내가 뭘 찾고 있었는지 몰랐다) – RodeoClown

+3

고마워 - 파이썬 워드 프로세서 중 하나도 언급하지 않았다. –

관련 문제