SHA-256 해싱 알고리즘

단비·2023년 4월 26일
0

학습

목록 보기
18/66

해싱(hashing) 이란

  • 해시 함수에 문자열 입력값을 넣어서 특정한 값으로 추출하는 것

A -> 해시 함수 -> Alpha
B -> 해시 함수 -> Bravo
C -> 해시 함수 -> Cycle

해시 함수란?

  • 임의의 데이터를 고정된 길이의 데이터로 매핑하는 단방향 함수
  • 입력값을 해싱했을 때 출력값은 일정하다는 것을 근거로, 사용자의 비밀번호나 중요 정보의 내용을 해싱하여 복호화 할 수 없음

Java: Hash Map
Javascript : 객체 or Map
Python : 사전(dictionary)

해시 테이블 (Hash Table)

  • 해시 함수로 매핑한 키 값을 인덱스로 한 배열 혹은 객체

충돌 (Collision)

  • 해시 함수에 따라 여러 키 값이 하나의 값으로 매핑되는 경우

솔트(Salt)

  • 해시함수를 돌리기 전 임의의 문자열을 붙이는 것

SHA(Secure Hash Algorithm)

  • 미국 국가안보국(NSA)가 1993년에 처음 설계
  • 미국 국가 표준

최초의 함수는 SHA-0

2년 후 SHA-1 발표

SHA-224, SHA-256, SHA-384, SHA-512 발표 [통칭해 SHA-2라고 함]



SHA-256 (단방향 암호화)

  • 메시지, 파일 혹은 데이터 무결성 검증에 널리 사용되는 암호화 해싱 알고리즘(함수)
  • 문자들을 256 bit 길이의 key로 변환 (64자리)
  • 블록체인에서 가장 많이 사용되는 방식

🎃 SQL문으로 sha 인코딩 확인법

select sha2('1234!',256);

사용법

1. MessageDigest 인스턴스 생성

  • 파라미터로 받는 알고리즘은 NoSuchAlgorithmException 를 발생시키므로 예외처리 필요
public String encrypt(String text) throws NoSuchAlgorithmException {
		MessageDigest md = MessageDigest.getInstance("SHA-256");

2. 해시값 갱신

  • 바이트코드로 변경 후 인스턴스의 해시값(digest)에 갱신
md.update(texv.getBytes());

byte: 8bit 2진법(0 or 1)
Hex digits: 16bit
base64: 64bit

3. Byte -> Hex 변환

  • 인스턴스의 해시값(digest)을 Hex로 변환
byte[] bytes = md.digest();
StringBuilder builder = new StringBuilder();
    for (byte b : bytes) {
         // %02x : b를 2자리 Hex String으로 출력
         builder.append(String.format("%02x", b));
	}
return builder.toString();

& 0xff
byte 로 표현 가능한 숫자는 -128~127 (1byte, 즉 8bit)
8bit로 0~255 까지의 값을 나타내고 싶다면 1byte가 아닌 4byte의 공간을 갖는 integer 로 형변환이 필요함
이를 위해서 0xff(integer 형)에 & 연산을 통하여 암묵적 형변환이 일어나게 함

4. 사용

// SHA256는 클래스 이름
SHA256 sha256 = new SHA256();
sha256.encrypt(인코딩할 텍스트);



💡 TIPS!


1. HTML 에러 코드

ERROR CODE
200에러없이 성공적으로 페이지를 불러오거나 데이터를 전송
400Bad Request로써, 요청 실패-문법상 오류가 있어서 서버가 요청 사항을 이해하지 못함
404Not Found, 문서를 찾을 수 없음->클라이언트가 요청한 문서를 찾지 못한 경우에 발생함
(URL을 잘 살펴보기)
405Method not allowed, 메소드 허용 안됨-> Request 라인에 명시된 메소드를 수행하기 위한 해당 자원의 이용이 허용되지 않았을 경우 발생함
(페이지는 존재하나, 그걸 못보게 막거나 리소스를 허용안함)
415지원되지 않는 형식으로 클라이언트가 요청을 해서 서버가 요청에 대한 승인을 거부한 오류를 의미
(ContentType,Content Encoding 데이터를 확인할 필요가 있다.)
500서버 내부 오류는 웹 서버가 요청사항을 수행할 수 없을 경우에 발생함
505HTTP Version Not Supported
profile
tistory로 이전! https://sweet-rain-kim.tistory.com/

0개의 댓글