[java] 자바 네트워크 보안을 위한 비밀번호 해시와 솔트(Salt) 사용 방법
인터넷 네트워크를 통한 정보 교환은 보안 문제에 민감합니다. 특히 사용자의 비밀번호는 암호화되어 안전하게 저장되어야 합니다. 자바에서는 비밀번호 해시와 솔트(salt)를 사용하여 보안을 강화할 수 있습니다.
비밀번호 해싱 (Password Hashing)
비밀번호를 평문 그대로 저장하는 대신, 해싱 알고리즘을 사용하여 비밀번호를 변환한 후에 이를 저장합니다. 이때, 같은 비밀번호를 입력하더라도 해싱된 결과는 항상 동일하므로 원본 비밀번호를 직접 저장하지 않고, 해시 값만을 저장합니다. 자바에서는 MessageDigest
클래스를 사용하여 다양한 해싱 알고리즘을 지원합니다.
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class PasswordHashing {
public static String hashPassword(String password, String salt) {
try {
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(salt.getBytes());
byte[] hashedPassword = messageDigest.digest(password.getBytes());
return Base64.getEncoder().encodeToString(hashedPassword);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
}
위의 코드는 MessageDigest
클래스를 사용하여 SHA-256 해싱 알고리즘을 이용하여 비밀번호를 해싱하는 예시입니다.
솔트 사용 (Using Salt)
솔트는 해시된 비밀번호에 무작위 문자열을 추가하여 보안을 강화하는 기술입니다. 솔트를 사용하면 동일한 비밀번호를 가진 사용자도 다른 해시 값을 갖게 됩니다. 이는 레인보우 테이블과 같은 사전 공격을 방지하는 데 도움을 줍니다.
import java.security.SecureRandom;
import java.util.Base64;
public class PasswordHashing {
public static String generateSalt() {
byte[] salt = new byte[16];
SecureRandom secureRandom = new SecureRandom();
secureRandom.nextBytes(salt);
return Base64.getEncoder().encodeToString(salt);
}
}
위의 코드는 SecureRandom
클래스를 사용하여 무작위 솔트를 생성하는 예시입니다.
네트워크 보안을 위한 비밀번호 해싱과 솔트 사용 방법에 대한 간략한 소개였습니다. 안전한 인터넷 서비스를 제공하기 위해 보안 기술의 적용이 매우 중요합니다.
참고 문헌 :
- Oracle Documentation: MessageDigest
- Oracle Documentation: SecureRandom