ALGORITHM

SHA-256 (Secure Hash Algorithm)

2022. 4. 4. 15:47
728x90
반응형

 

현재 개발 중인 프로젝트는 bearer 방식의 jwt +  hash 비밀번호를 쓰려고 한다. 

 

 

SHA-256에 대해 알아 보려고 한다. 

 

 

복잡하게 알아볼 필요까진 없다고 본다.

 

java code 사용 할 경우. 

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
public class main {
    public static void main(String[] args) throws Exception {
        System.out.println(sha256("needjarvis"));        
    }
  
    /**
     * SHA-256으로 해싱하는 메소드
     * 
     * @param bytes
     * @return
     * @throws NoSuchAlgorithmException 
     */
    public static String sha256(String msg) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        md.update(msg.getBytes());
        
        return bytesToHex1(md.digest());
    }
   
    /**
     * 바이트를 헥스값으로 변환한다.
     * 
     * @param bytes
     * @return
     */
    public static String bytesToHex(byte[] bytes) {
        StringBuilder builder = new StringBuilder();
        for (byte b: bytes) {
          builder.append(String.format("%02x", b));
        }
        return builder.toString();
    }
}

 

 

구현은 쉽다. 기존에 있는 라이브러리 쓰면 되니까.

 

 

왜 쓰는가 ?

 

2^256 만큼의 경우의 수가 존재하기 때문이다. 

 

따라서 개인 컴퓨터로 무차별 대입 공격을 한다면, 많은 시간이 소요된다. 

 

SHA-256 해시 함수는 어떤 길이의 값을 입력하더라도 256비트의 고정된 결과값을 출력한다.[2] 일반적으로 입력값이 조금만 변동하여도 출력값이 완전히 달라지기 때문에 출력값을 토대로 입력값을 유추하는 것은 거의 불가능하다. 아주 작은 확률로 입력값이 다름에도 불구하고 출력값이 같은 경우가 발생하는데 이것을 충돌이라고 한다. 이러한 충돌의 발생 확률이 낮을수록 좋은 함수라고 평가된다.

 

 

 

 

sha 256 과 512 의 차이는 다음과 같다. 

 

http://wiki.hash.kr/index.php/SHA512

 

그래서 우린 256으로 간다.

 

SHA-512로 서명 된 인증서는 Windows TLS 1.2에서는 작동하지 않는 점이 발견되었고,[7]길이 확장 공격에 대해 취약하며, SHA-256이 SHA-512보다 훨씬 빠르게 64개의 해시를 만들어낸다. 즉, 아직까지 SHA-512를 사용할 만큼의 문제점도 발견되지 않았다. 또한 현재에는 짧은 문자열(36 ~ 49 문자)이 사용되고 있고 긴 문자열(72 ~ 85 문자)에서도 큰 속도의 차이는 없기 때문에 상대적으로 속도적으로 느리며, 상대적으로 기술 비용이 많이 들어가는 SHA-512를 채택할 필요는 없다는 것이다.​

 

320x100
반응형
저작자표시 (새창열림)

'ALGORITHM' 카테고리의 다른 글

JAVA 미로탐색 / BFS  (0) 2022.06.14
백준 2837 / java  (0) 2022.04.05
완전탐색 / 모의고사  (0) 2022.03.23
Big O / 시간복잡도 / Binary Search / Linear Search  (0) 2022.03.20
백준 / greedy / 5585 / 거스름돈  (0) 2022.03.14
'ALGORITHM' 카테고리의 다른 글
  • JAVA 미로탐색 / BFS
  • 백준 2837 / java
  • 완전탐색 / 모의고사
  • Big O / 시간복잡도 / Binary Search / Linear Search
girin_dev
girin_dev
기록합시다.
250x250
girin_dev
girin_dev
girin_dev

github.com/jaemanc


전체
오늘
어제
  • 분류 전체보기 (122)
    • ALGORITHM (23)
    • AWS (4)
    • Effective Java (4)
    • ERROR (12)
    • DB (11)
    • JAVA (23)
      • SPRING (10)
    • PYTHON (5)
      • TOY_PROJECT (1)
    • MOBILE (4)
    • SERVER (8)
    • TIPS (16)
    • WAS (2)
    • 새싹 일기 (5)
    • DATA (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • oracle cloud
  • 가장 큰 수
  • docker
  • java
  • vertica
  • dp
  • spring boot
  • 다이나믹 프로그래밍
  • 바질
  • 바둑이
  • offset
  • Flutter
  • springboot
  • 바질 페스토
  • python3
  • error
  • 프로그래머스
  • Chat GPT
  • JAVA 11
  • lis
  • CentOS 8
  • react-native
  • 바질 키우기
  • querydsl
  • IntelliJ
  • centos7
  • oracle
  • Effective Java
  • 새싹
  • jwt

최근 댓글

최근 글

hELLO · Designed By 정상우.
girin_dev
SHA-256 (Secure Hash Algorithm)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.