BCrypt password Encoding
IT IT 인터넷 Java Password EncoderByCrypt
http://java21.net/blog/marco?post_id=2391
BCrypt password Encoding
BCrypt 설명
BCrypt는 비밀번호와 같은 민감한 정보를 안전하게 저장하기 위해 설계된 암호화 해시 알고리즘입니다. 주로 비밀번호를 안전하게 저장하고 비교하는 데 사용됩니다.
BCrypt의 주요 특징
Salt 사용: BCrypt는 각 비밀번호에 대해 고유한
salt를 생성하여 적용합니다. 이를 통해 동일한 비밀번호라도 고유한 해시 값이 생성됩니다.계산 비용 (Work Factor): BCrypt는
work factor를 설정하여 해시 계산의 복잡도를 조정할 수 있습니다. 이 값이 커질수록 해시 계산이 느려져 보안이 강화됩니다.단방향 해시: BCrypt는 단방향 해시 함수로, 비밀번호를 해시하면 원본 비밀번호로 복원할 수 없습니다.
자동 Salt 생성: BCrypt는 해시 생성 시 자동으로 salt를 생성하고, 해당 salt를 해시 값에 포함시킵니다.
BCrypt의 작동 방식
사용자가 비밀번호를 입력합니다.
시스템은 비밀번호에 대해 랜덤한
salt를 생성합니다.입력된 비밀번호와
salt를 결합하여 해시를 생성합니다.해시값과
salt를 함께 데이터베이스에 저장합니다.사용자가 나중에 로그인할 때 입력한 비밀번호와 저장된
salt를 사용하여 새로 해시를 계산하고, 기존의 해시값과 비교합니다.
JBcrypt 사용 예시 (Java)
Java에서 BCrypt를 사용하려면 JBcrypt 라이브러리를 사용하면 됩니다. 아래는 BCrypt를 사용한 비밀번호 해시화 및 검증 예시입니다.
import org.mindrot.jbcrypt.BCrypt;
public class BCryptExample {
// 비밀번호를 해시하는 메소드
public static String hashPassword(String password) {
// salt가 자동으로 생성되어 사용됨
String hashedPassword = BCrypt.hashpw(password, BCrypt.gensalt());
return hashedPassword;
}
// 비밀번호가 맞는지 확인하는 메소드
public static boolean checkPassword(String password, String storedHash) {
return BCrypt.checkpw(password, storedHash);
}
public static void main(String[] args) {
String password = "mySecurePassword";
// 비밀번호 해시화
String hashedPassword = hashPassword(password);
System.out.println("Hashed Password: " + hashedPassword);
// 비밀번호 검증
boolean isMatch = checkPassword("mySecurePassword", hashedPassword);
System.out.println("Password match: " + isMatch);
}
}
주요 메소드 설명
BCrypt.hashpw(password, gensalt()): 주어진 비밀번호를 해시하여 반환합니다.gensalt()메소드는 salt를 생성하며, 기본적으로cost factor는 10으로 설정됩니다.BCrypt.checkpw(password, storedHash): 주어진 비밀번호와 저장된 해시값을 비교합니다. 입력된 비밀번호가 올바른지 확인하는 데 사용됩니다.
cost factor 조정
cost factor는 gensalt() 메소드에서 두 번째 인자로 지정할 수 있습니다. 예를 들어, cost factor를 12로 설정하면 해시 계산 비용이 더 커지므로 보안이 강화됩니다.
String hashedPassword = BCrypt.hashpw(password, BCrypt.gensalt(12)); // cost factor를 12로 설정
Note: 높은 cost factor는 해시 계산에 더 많은 시간이 걸리므로, 해커가 비밀번호를 추측하는 데 시간이 더 걸리게 되어 보안이 강화됩니다.