일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 정보처리기사실기정리
- html기초
- spring crud
- 2020정보처리기사실기요약
- 프로그래머스 쿼리문
- CRUD게시판만들기
- 정처기실기정리
- 스프링게시판만들기
- 날짜지정팝업
- jsp 팝업띄우기
- Oracle기초
- 프로그래머스 SQL
- 스프링 crud
- 자바배열예제
- 스프링 CRUD게시판
- 오라클설치
- 게시판만들기
- 프로그래머스 MYSQL
- 자바 정규표현식 예제
- 자바연산자
- PLSQL
- 자바기초
- 2020정보처리기사실기정리
- spring crud게시판
- 오버라이딩
- crud게시판
- js datepicker
- jsp 날짜팝업
- 2020정보처리기사실기
- jsp게시판만들기
Archives
- Today
- Total
영보의 SystemOut.log
[Java] SHA-256 해싱(Hashing)알고리즘으로 패스워드 암호화하기 본문
반응형
SHA-256
SHA-256은 SHA(Secure Hash Algorithm) 알고리즘의 한 종류로서 256비트로 구성되며 64자리 문자열을 반환한다. SHA-256은 미국의 국립표준기술연구소(NIST; National Institute of Standards and Technology)에 의해 공표된 표준 해시 알고리즘인 SHA-2 계열 중 하나이며 블록체인에서 가장 많이 채택하여 사용하고 있다. 이름에 내포되어 있듯 {\displaystyle 2^{256}}{\displaystyle 2^{256}}만큼 경우의 수를 만들수 있다. 개인용 컴퓨터로 무차별 대입을 수행해 해시 충돌 사례를 찾으려고 할 때 많은 시간이 소요될 정도로 큰 숫자이므로 충돌로부터 비교적 안전하다고 평가된다.
http://wiki.hash.kr/index.php/SHA256
자세한 정보는 해시넷 위키에서 ㄱㄱ
암호화 알고리즘 패스워드 암호화 예제
자바에서 SHA 알고리즘을 사용하려면 MessageDigest 클래스를 이용한다. update() 메소드를 호출할 때마다 객체 내에 저장된 digest 값이 계속해서 갱신된다. 최종적으로 digest() 메소드를 호출하면 그 값을 가져올 수 있다.
PasswordEncryptUtil.java
package 패스워드암호화시키기;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class PasswordEncryptUtil {
public static void main(String[] args) {
// 패스워드 지정
String plainText = "test1234"; // 평문
String sha256 = "" ;
try {
/* MessageDigest 클래스의 getInstance() 메소드의 매개변수에 "SHA-256" 알고리즘 이름을 지정함으로써
해당 알고리즘에서 해시값을 계산하는 MessageDigest를 구할 수 있다 */
MessageDigest mdSHA256 = MessageDigest.getInstance("SHA-256");
// 데이터(패스워드 평문)를 한다. 즉 '암호화'와 유사한 개념
mdSHA256.update(plainText.getBytes("UTF-8"));
// 바이트 배열로 해쉬를 반환한다.
byte[] sha256Hash = mdSHA256.digest();
// StringBuffer 객체는 계속해서 append를 해도 객체는 오직 하나만 생성된다. => 메모리 낭비 개선
StringBuffer hexSHA256hash = new StringBuffer();
// 256비트로 생성 => 32Byte => 1Byte(8bit) => 16진수 2자리로 변환 => 16진수 한 자리는 4bit
for(byte b : sha256Hash) {
String hexString = String.format("%02x", b);
hexSHA256hash.append(hexString);
}
sha256 = hexSHA256hash.toString();
}catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}System.out.println(sha256);
//937e8d5fbb48bd4949536cd65b8d35c426b80d2f830c5c308e2cdec422ae2244
}
}
암호화한 패스워드를 DB 회원 테이블에 담았다.
반응형
'국비교육(아이티센 입사교육) > Java' 카테고리의 다른 글
[Java] 자바 Enum 응용 결제/정산 시스템 만들기 (0) | 2021.10.12 |
---|---|
[Java] 자바 공연 예약 어플리케이션 만들기 (0) | 2021.10.07 |
[Java] 자바 정규표현식 사용하여 댓글 분석하기 (compile, matcher, pattern) (0) | 2021.10.07 |
[Java] 람다식(Lambda Expressions) / 스트림(Stream) / 예제 (0) | 2021.10.06 |
[Java] 자바 스레드(Thread)개념 / 스레드 스케줄링 / 예제 (0) | 2021.10.06 |