반응형
SHA256 알고리즘을 사용한 해시함수.
메시지 다이제스트를 문자열로 return 하는 경우의 메소드와
바이트 배열로 return 하는 두 가지 경우를 생성함.
public class Sha256EncryptUtil {
public static String ShaEncoder(String userPw) {
try {
//알고리즘은 SHA256으로 하여 MessageDigest 객체 생성
MessageDigest digest = MessageDigest.getInstance("SHA-256");
//해시된 데이터는 바이트 배열의 바이너리 데이터임.
byte[] hash = digest.digest(userPw.getBytes(StandardCharsets.UTF_8));
StringBuilder hexString = new StringBuilder();
//바이트 배열을 16진수(hex) 문자열로 변환
for (byte b : hash) {
//byte 8비트 ->int 32bit 형변환 시 앞의 18비트가 19번째 비트와 같은 값으로 채우는데
//이 경우에 원본 값과 다른 경우가 되는 것을 방지하기 위한 연산
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
public static byte[] shaEncoderByte(String message){
//이 메소드는 바이트배열을 16진수 문자열로 변환하지 않음
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(message.getBytes(StandardCharsets.UTF_8));
return hash;
}catch(Exception ex){
throw new RuntimeException(ex);
}
}
}
반응형
'코딩 관련 > Java' 카테고리의 다른 글
[JAVA] API 호출하기 / URI 요청하기 / URI 생성하기 (0) | 2022.06.03 |
---|---|
[JAVA] java object to JSON / object를 json으로 변환 / json 파싱 / JSON Object 사용 / JSON Array add (0) | 2022.05.27 |
[JAVA] 위경도 변환 / 위경도 거리 계산 / 위경도 연산 / 위경도 거리 구하기 / 위경도 좌표 구하기 (0) | 2022.03.21 |
[JAVA] java AES256 암호화 / AES256 encode / AES256 decode (0) | 2022.02.23 |
[JAVA] response entity, api 데이터 조회, api json 데이터 작업 (0) | 2021.12.17 |