2023 06 15
2023-06-15¶
MessageDigest¶
참고: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/security/MessageDigest.html 참고: https://m.blog.naver.com/puri8467/221429417229 참고: https://kshman94.tistory.com/84
- 개요
- 단방향 해시 함수값을 구할 때 사용
- 비밀번호를 해시화하여 저장하고 싶은 경우
- 파일의 유효성을 해시 값을 통해 확인하고 싶은 경우
- 특정 정보를 암호화하고 싶은 경우
- Java에서 MD5, SHA를 이용한 알고리즘 사용하려면 MessageDigest 클래스를 사용하자
- 랜덤 길이의 데이터 사이즈를 고정된 해시값으로 변경 시켜줄 때 사용
- 데이터는
update메서드를 통해 프로세싱이 된다 reset을 통해 원복 시킬 수 있다update가 완료되면,digest메서드가 수행되어 hash 계산을 완수한다digest가 실행되면, MessageDigest는 초기화 상태로 돌아간다
- 데이터는
- 단방향 해시 함수값을 구할 때 사용
- 메서드
getInstance(String algorithm)- 입력한 해시 알고리즘 수행하는 MessageDigest 생성
update(byte[] input)- digest를 업데이트 시킴
digest(): byte[]- Hash 연산을 완료하고 패딩 붙이기 등의 최종연산 수행
- 예제 코드
public class sha256 { public static String hashSha256(String pwd) { try { MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] hash = messageDigest.digest(pwd.getBytes("UTF-8")); StringBuffer hexString = new StringBuffer(); for (int i = 0; i < hash.length; i++) { String hex = Integer.toHexString(0xff & hash[i]); if (hex.length() == 1) hexString.append('0'); hexString.append(hex); } return hexString.toString(); } catch (Exception ex) { throw new RuntimeException(ex); } } }
Hash Function & Hash Table¶
- Hash Function
- Input을 받아 고정된 길이의 문자열로 처리
- 고정된 길이의 문자열을 hash-cdoe/hash-value 라고 지칭
- 랜덤한 길이의 Input을 무엇을 받던 고정된 길이의 문자열로 변경시켜주는게 해시 함수의 용도
- 해시 함수의 결과값은 주로 해시테이블과 같은 데이터 구조의 인덱스/주소값으로 사용된다
- Input을 받아 고정된 길이의 문자열로 처리
- Hash Table
- Hash Function으로 고정된 길이의 문자열 반환 받았자나?
- 그거 적당한 버켓에 넣어주세요
- 자바의 hashMap은 hashCode()를 통해서 해싱을 진행하는데, 이는 기본적으로는 메모리 주소로 결정된다
- 커스텀 가능하긴 함 (SHA-256 같은걸로다가)