본문 바로가기
Language/Java

[Java] SHA 암호화 알고리즘

by J4J 2021. 11. 8.
300x250
반응형

안녕하세요. J4J입니다.

 

이번 포스팅은 sha 암호화 알고리즘에 대해 적어보는 시간을 가져보려고 합니다.

 

 

 

SHA란?

 

sha는 secure hash alogirthm의 약자로 해시를 이용한 암호화 알고리즘입니다.

 

sha는 크게 다음과 같이 나뉩니다.

 

  • sha-0
  • sha-1
  • sha-2

 

 

 

sha-0은 최초로 만들어진 sha함수를 일컫는 말입니다.

 

그리고 이후로 sha-0을 변형하여 등장한 것이 sha-1입니다.

 

여기서 또다시 변형이 이루어져 sha-224, sha-256, sha-384, sha-512 등의 암호화 방식이 등장했는데 이들을 sha-2라고 일컫습니다.

 

 

반응형

 

 

sha-0과 sha-1은 160비트의 해시값을 만들어내는 방식이고 특히 sha-1은 SSL, TLS, SSH 등의 많은 프로토콜과 프로그램에서 사용하는 방식입니다.

 

하지만 보안적인 부분에서는 당연히 그 이후에 등장하기도 했고 160비트보다 더 큰 비트 값들을 만들어내는 sha-2 사용을 추천하고 있습니다.

 

적어도 sha-256을 사용하는 것이 권장되고 있습니다.

 

 

 

sha의 가장 큰 특징으로는 단방향 암호화 알고리즘이라는 것입니다.

 

일반적으로 많이 언급되는 aes 암호화 알고리즘같은 경우는 양방향 암호화 알고리즘이라고 부릅니다.

 

왜냐하면 동일한 키 값을 이용하여 암호화, 복호화가 모두 가능하기 때문입니다.

 

하지만 sha는 aes와 달리 한번 암호화를 하게 되면 복호화가 불가능합니다.

 

이렇게 복호화는 불가능하고 암호화만 가능한 것을 단방향 암호화 알고리즘이라고 부르고 또한 이런 특징 때문에 비밀번호와 같이 very 민감한 정보들을 암호화하는 데 사용되고 있습니다.

 

 

 

추가적으로 복호화가 불가능하기 때문에 올바른 정보를 들어왔는지 확인하는 방법은 암호화된 값이 동일한지를 확인하면 됩니다.

 

암호화된 값이 동일하지 않다면 올바른 정보가 아니라고 판단하여 로그인과 같은 기능이 수행되지 않도록 할 수 있습니다.

 

 

 

SHA 사용 방법

 

자바에서 sha 암호화 알고리즘을 사용하는 방법은 간단합니다.

 

예시 코드를 보여드리겠습니다.

 

 

728x90

 

 

package encryption;

import java.security.MessageDigest;
import java.util.Base64;

public class SHA {
	public static void main(String[] args) {
		System.out.println(new SHA().Encrypt("my password"));
	}
	
	public String Encrypt(String text) {
		String encryptedText = "";
		
		try {
			MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
			messageDigest.update(text.getBytes("UTF-8"));
			
			encryptedText = new String(Base64.getEncoder().encode(messageDigest.digest()));
		} catch(Exception e) {
			e.printStackTrace();
		}
		
		return encryptedText;
	}
}

 

 

 

코드를 위와 같이 작성하고 실행해보면 다음과 같이 암호화가 이루어진 문자열을 확인할 수 있습니다.

 

실행 결과

 

 

 

 

 

 

 

이상으로 sha 암호화 알고리즘에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

 

 

 

728x90
반응형

댓글