-
JAVA - MD5, SHA256 암호화 하기 (해쉬 코드 얻기)IT/JAVA 2020. 6. 9. 12:31반응형
특정 텍스트를 암호화하여 DB에 보관해야 하는 일들이 있습니다.
특히 패스워드 같은 것은 입력받은 문자 그대로 저장하는 것보다 암호화하여 저장하는 것이 보안을 더 높일 수 있으며,
많은 건수의 데이터들을 중복을 찾을 때 해시값으로 찾게 되면 조금 더 편리하게 이용할 수 있습니다.
암호화 또는 파일 무결성 검사 용도로 쓰이고 있는 MD5, SHA-256에 대해서 알아보도록 하겠습니다.
MessageDigset Class
java.security.MessageDigest 클래스를 사용하며, 해시 알고리즘에는 MD5, SHA-1, SHA-256 등이 있습니다.
MessageDigest.getInstance(String algorithm) 메소드의 인수에 알고리즘 이름을 지정함으로써 해당 알고리즘에서 해시값을 계산하는 MessageDigest를 구할 수 있습니다.
MD5 (Massage -Diget algorthm 5)
MD5는 메시지 축약 알고리즘으로써, 파일 무결성 검사 용도로도 많이 쓰이고 있습니다
128bit의 해쉬를 제공하며, 암호화와 복호화를 통하여 보안용 도로도 많이 쓰이고 있습니다.
하지만 암호화 결함이 발견되어 보안 용도로 사용할 때에는 SHA와 같은 다른 알고리즘을 사용하는 것이 권장되고 있다고 합니다.
MD5 코드
package org.test.controller.utill; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class md5 { public static String testMD5(String pwd) { String MD5 = ""; try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(pwd.getBytes()); byte byteData[] = md.digest(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < byteData.length; i++) { sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1)); } MD5 = sb.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); MD5 = null; } return MD5; } }
SHA (Secure Hash Standard)
SHA(Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은 서로 관련된 암호학적 해시 함수들의 모음입니다.
여러 종류가 존재하며 그중 SHA-1은 SHA 함수들 중 가장 많이 쓰이며, TLS, SSL, PGP, SSH, IPSec 등 많은 보안 프로토콜과 프로그램에서 사용되고 있습니다.
SHA-1은 이전에 널리 사용되던 MD5를 대신해서 쓰이기도 했으며, 좀 더 중요한 기술에는 SHA-256이나 그 이상의 알고리즘을 사용할 것을 권장합니다.
SHA-256 코드
package org.test.controller.utill; import java.security.MessageDigest; public class sha256 { public static String testSHA256(String pwd) { try{ MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.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); } } }
MD5, SHA-256 실행코드 및 결과
@RequestMapping(value = "/", method = RequestMethod.GET) public String home() { /* 암호화할 텍스트 */ String text = "Hello, Java"; /* MD5 암호화 */ String encrypt = md5.testMD5(text); /* MD5 암호화 결과 */ System.out.println("MD5 암호화 요청 텍스트 : " + text); System.out.println("MD5 암호화 완료 텍스트 : " + encrypt); /* SHA256 암호화 */ String encryptSHA256 = sha256.testSHA256(text); /* SHA256 암호화 결과 */ System.out.println("SHA256 암호화 요청 텍스트 : " + text); System.out.println("SHA256 암호화 완료 텍스트 : " + encryptSHA256); return "home"; }
반응형'IT > JAVA' 카테고리의 다른 글
초기화 블럭 (initialization block) (0) 2023.01.29 JAVA - 텔레그램 API 봇을 이용하여 메시지 보내기 (8) 2020.05.08 JAVA - 로또 게임 만들기 (9) 2020.04.28 JAVA - 가위바위보 만들기 (0) 2020.04.28 JAVA - 상속 및 인터페이스 (0) 2020.04.28 댓글