데이터를 관리할 때, 비밀번호와 같은 중요한 데이터를 암호화할 필요가 있다. ( 나쁜 시스템 관리자가 있을 수 있으니..)
중요한 데이터를 복호화할 수 없는 알고리즘을 사용하여 암호화하여 관리해야한다.
암호화 시 사용할 알고리즘은 SHA-256이다. SHA-256는 해시 함수중에 하나로서, 해시의 결과가 256bit이라고 한다.
Java에서 제공하는 MessageDigest 를 사용하여 암호화할 것이다.
순서로서는
- String 형태로 들어오는 암호화될 대상을 byte[]로 쪼갠 뒤,
- MessageDigest 객체를 이용하여 해쉬함수를 통해 암호화된 결과를 byte[]형태로 반환받는다.
- 결과를 16진수 문자열로 변환시켜 String 형태로 변환하여 완성한다.
4. 이때, 1자리 수로 반환되는 경우가 있기 때문에 변환된 문자의 결과 길이가 1일 때마다 아무 문자나 앞이나 뒤에 추가해준다.
public String getSecureData(String password) {
StringBuffer sb = new StringBuffer();//문자열을 누적시킬 객체
try {
//분해하여 16진수로 변환
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] data = password.getBytes("UTF-8"); //String형을 byte[]로 쪼갰다.
byte[] hash = digest.digest(data);
//쪼개진 데이터를 대상으로 16진수값으로 변환!!
for(int i=0;i<hash.length;i++) {
String hex = Integer.toHexString(0xff&hash[i]);//16진수 문자열로 변환
if(hex.length()==1) {
sb.append("0");
}
sb.append(hex);
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return sb.toString();
}
같은 문자열을 암호화할 시 같은 암호화된 문자열이 반환되므로, 비밀번호와 같은 데이터를 암호화하여 사용할 수 있다.
'프로그래밍 > Java' 카테고리의 다른 글
java - mail 보내기 (0) | 2021.01.06 |
---|---|
싱글톤 패턴 알아보기 (0) | 2020.12.14 |
JavaFX - 개발환경 구축 및 생명주기 (0) | 2020.11.23 |
Java - JSON & XML 파싱 (0) | 2020.11.17 |
Java - 소켓프로그래밍 기초 Echo System (0) | 2020.11.09 |