-
[JAVA ]암호화와 복호화를 활용한 간단한 콘솔 로그인 예제 1/3 (1- 암호화와 복호화에 대하여 (feat , SHA512 예제))WEB/BACK 2021. 5. 6. 12:30반응형
안녕하세요 이번 포스팅은 java를 이용한 콘솔에서 돌려보는 간단한 로그인 예제입니다. 그저 자바 어플리케이션이 돌아가는 환경만 있으면 실습가능합니다. 포스팅도할겸 암호화 복호화 정리도 할겸 겸사겸사 작성하게 되었습니다. 전체 목차는 다음과 같고 여기는 첫번째 주제를 다루는 공간입니다.
- 암호화와 복호화에 대하여 (feat , SHA512 예제)
- 자바 기본 로그인 예제 blumint.tistory.com/14
- 자바 기본 로그인 예제 + 암호화 복호화 활용하기 blumint.tistory.com/15
암호화와 복호화
암호화(Encryption)
사용자 입력값 "mypw" -> "aDielfksnelk34lksdf"
복호화(Decryption)
"aDielfksnelk34lksdf" -> "mypw"사용자 비밀번호를 암호화하기위해서 보통 해싱함수를 사용해서 비밀번호를 해싱하고 그래도 불안하니깐 거기에 소금을 쳐서(salt)값을 이용하여 암호화를 한다. 여기서는 단방향의 SHA512방식 + salt(난수값)을 사용하겠다. 즉 사용자의 비밀번호를 저장하고 암호화하고 복호화할때 salt(난수)값이 필요하다는 것이다.
즉, DB에 저장될 데이타는
- 사용자ID - "admin"
- 난수값salt - " hbw4HbcOfH3Duqqrvw7ODg=="
- 암호화된 pwd - "3d7a23b56e009957c4510d99d9fc2aebc80073f2a0823a63d51466bd8356e384590a162d423c"
로그인 할 때는 ID로 SALT 값을 조회한 후 입력한 비밀번호와 SALT 값을 다시 암호화 하여 비밀번호가 맞는지 확인하는 과정이다. SHA512에 대한 위키의 설명을 조금 가져와보았다.
SHA(Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은 서로 관련된 암호학적 해시 함수들의 모음이다. 이들 함수는 미국 국가안보국(NSA)이 1993년에 처음으로 설계했으며 미국 국가 표준으로 지정되었다. SHA 함수군에 속하는 최초의 함수는 공식적으로 SHA라고 불리지만, 나중에 설계된 함수들과 구별하기 위하여 SHA-0이라고도 불린다. 2년 후 SHA-0의 변형인 SHA-1이 발표되었으며, 그 후에 4종류의 변형, 즉 SHA-224, SHA-256, SHA-384, SHA-512가 더 발표되었다. 이들을 통칭해서 SHA-2라고 하기도 한다.
1. salt생성(난수값)
public static String Salt() { String salt=""; try { SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); byte[] bytes = new byte[16]; random.nextBytes(bytes); salt = new String(Base64.getEncoder().encode(bytes)); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return salt; }
2. SHA512 암호화
사용자가 입력한 비밀번호와 앞에서 생성한 난수값을 활용해서 암호화를 한다.
public static String SHA512(String password, String hash) { String salt = hash+password; String hex = null; try { MessageDigest msg = MessageDigest.getInstance("SHA-512"); msg.update(salt.getBytes()); hex = String.format("%128x", new BigInteger(1, msg.digest())); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return hex; }
3. 테스트 코드
public class SHAtest { public static void main(String[] args) { // 사용자가 설정한 pwd String pw = "12345"; //salt값 생성 String salt = SHA512.Salt_Password(); System.out.println("salt="+salt); //암호화 String pw_encrypt = SHA512.SHA512_Password(pw, salt); System.out.println("암호화된 비밀번호="+pw_encrypt); } }
4. 결과
이번 포스팅에서는 간단하게 "1- 암호화와 복호화에 대하여 (feat , SHA512 예제))" 를 알아보았습니다. 다음에는 간단한 로그인예제에 활용해보는 시간을 갖도록 하겠습니다.
반응형'WEB > BACK' 카테고리의 다른 글