(ChatGPT) SALT와 SHA-256 적용된 자바소스ChatGPT2023. 2. 23. 15:36
Table of Contents
반응형
아래는 입력된 문자열에 대해 SALT를 적용한 후 SHA-256 해시 함수를 적용하는 자바 코드입니다.
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
public class PasswordHashing {
private static final int SALT_LENGTH = 16;
public static String hashPassword(String password) {
String salt = generateSalt();
return hashPassword(password, salt);
}
public static String hashPassword(String password, String salt) {
String hashedPassword = null;
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(salt.getBytes(StandardCharsets.UTF_8));
byte[] hashedPasswordBytes = md.digest(password.getBytes(StandardCharsets.UTF_8));
hashedPassword = Base64.getEncoder().encodeToString(hashedPasswordBytes);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return salt + "$" + hashedPassword;
}
private static String generateSalt() {
byte[] salt = new byte[SALT_LENGTH];
SecureRandom secureRandom = new SecureRandom();
secureRandom.nextBytes(salt);
return Base64.getEncoder().encodeToString(salt);
}
public static boolean checkPassword(String password, String hashedPassword) {
String[] saltAndPassword = hashedPassword.split("\\$");
String salt = saltAndPassword[0];
String hash = hashPassword(password, salt).split("\\$")[1];
return hash.equals(saltAndPassword[1]);
}
public static void main(String[] args) {
String password = "password123";
String hashedPassword = hashPassword(password);
System.out.println("Hashed password: " + hashedPassword);
System.out.println("Is password correct? " + checkPassword(password, hashedPassword));
}
}
이 코드에서는 입력된 문자열에 대해 SALT를 적용하여 랜덤한 바이트 배열을 생성한 후, Base64 인코딩하여 문자열로 변환합니다. 그리고 생성된 SALT를 기존 입력된 문자열에 SHA-256 알고리즘을 적용하여 해시값을 생성합니다. 마지막으로, 생성된 SALT와 해시값을 구분자로 구분하여 문자열로 합칩니다. 해시값을 확인하기 위해서는 checkPassword() 메소드를 사용하여 입력된 비밀번호와 해시값을 비교합니다. 이 때, 입력된 비밀번호에 대해서도 SALT와 SHA-256 알고리즘을 적용하여 해시값을 생성하고, 생성된 SALT와 비교 대상 해시값을 구분자로 구분한 후, 비교합니다.
위의 코드를 복사하여 자바 통합개발환경(IDE)에서 새로운 프로젝트를 생성하고, 해당 클래스를 작성하고 실행하시면 됩니다. 실행 결과는 다음과 같습니다:
Hashed password: nMnpfy+1DYSVKDDGbzlmvQ0alqPCysOngF+IawjxgZk=$U0OK6UqrQvoewstOeUvOxxWlF8jfdC6OaIR6vUZJgU8=
Is password correct? true
위 실행 결과에서 첫 번째 줄은 해시된 비밀번호이고, 두 번째 줄은 checkPassword() 메서드를 사용하여 입력된 비밀번호가 일치하는지 여부를 확인한 결과입니다.
반응형
@위피M :: ChatGPT로 여는 새로운 세상!!
ChatGPT, 블록체인, 자바, 맥북, 인터넷, 컴퓨터 정보를 공유합니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!