본문 바로가기

JAVA HTML JAVASCRIPT/소오스

JAVA SHA-256 암호화 방법

728x90
반응형

SHA(Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은 서로 관련된 암호학적 해시 함수들의 모음입니다.

간단하게 요약하면
패스워드는 사용자 본인만 알아야 하므로 암호화할 때도 복호화가 불가능한 단방향 방식으로 암호화해야 한다.
즉, 시스템 관리자나 개발자라도 해당 시스템을 이용하는 개인의 비번을 복호화해서 알아낼 수 없도록 조치해야 한다는 말이다. 이때 사용하는 암호화 알고리즘이 SHA-2(Secure Hash Algorithm 2)이다.

해시 함수가 출력하는 암축된 문장을 다이제스트(Digest)라고 하는데, SHA-2가 생성하는 다이제스트 출력 길이는 224, 256, 384, 512 bit로 다양하다. 이때 256bit의 출력 길이를 갖는 SHA-2를 SHA-256이라고 부른다.

  • 단반향
    - 암, 복호화 : 암호화 가능 / 복호화 불가
    - 사용 : 개인정보라 암호화해서 관리/저장해야 하지만 필요시 화면에 표기(노출)하는 항목 등에 이용
    -암호화 적용 기술 : SHA-256
    -사용 예 : 비밀번호 등
  • 양방향
    - 암, 복호화 : 암호화 가능 / 복호화 가능
    - 사용 : 개인정보라 암호화해서 관리/저장해야 하지만 필요시 화면에 표기(노출)하는 항목 등에 이용
    -암호화 적용 기술 : Cipher AES, RSA
    -사용 예 : 핸드폰 번호, 이메일 주소 등

여기서 SHA-256 단방향 방식이다. 즉 암호화는 가능하고 복호화 불가능하다.

JAVA에서 SHA-256 적용 예시

// 암호화 함수 
public String SHA256Encrypt(String password){ 
	
    StringBuffer hexString = new StringBuffer(); 
	
    try { 
		MessageDigest digest = MessageDigest.getInstance("SHA-256"); 
		byte[] hash = digest.digest(password.getBytes("UTF-8")); 
			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); 
			} 
	}catch(SecurityException e){ 
    	throw new DisabledException("SecurityException"); 
    }catch(Exception e){ 
    	throw new DisabledException("SHA256Encrypt : 암호화 실패하였습니다."); 
    } 
    
    return hexString.toString().toUpperCase(); 
} 


// 로그인함수
@RequestMapping(value = "/login", method = {RequestMethod.GET, RequestMethod.POST}) public String login(HttpServletRequest request, HttpServletResponse response) throws Exception{ 

	String returnVal = false; 
    String loiginId = request.getAttribute("LOGIN_ID"); 
    String password = request.getAttribute("LOGIN_PASSWORD");
    Map<String, Object> loginCheckMap = new HashMap<String, Object>(); 
    loginCheckMap.put("LOGIN_ID", loiginId); 
    loginCheckMap.put("LOGIN_PASSWORD", SHA256Encrypt(password)); 
    Map<String, Object> loginInfo = loginService.loginCheck(loginCheckMap); 
    
    if (loginInfo) { 
    	returnVal = true; 
    } else { 
    	returnVal = false; 
    } 
    
    return returnVal; 
}

 

출처 : velog.io/@osmdark/JAVASHA-256%EC%95%94%ED%98%B8%ED%99%94%EB%B0%A9%EB%B2%95

728x90
반응형