기초 다지기

해시함수

hongjw 2020. 2. 2. 03:00

해시함수란 ?

임의의 길이의 데이터를 입력받아 항상 일정한 길이의 비트열로 변환시켜주는 함수

 

해시함수 종류

1) MD5 : 주로 무결성 검사에 사용되는 128비트의 암호화 해시함수

   ->128비트의 해시값 출력 (16진수로 32바이트)

 

2) SHA : 서로 관련된 암호학적 해시함수들의 모임. SHA 함수군에 속하는 최초의 함수는 공식적으로 SHA라고 불리지만, 나중에 설계된 함수들과 구별하기 위하여  SHA-0이라고도 불림. SHA는 하나인 MD4에 기반을 두고 있으며, MD5의 취약성을 개선 및 대처하기 위해 설계된 함수

   ->160비트의 해시값 출력 (16진수로 40바이트)

 

3) SHA-1 : 기존의 알고리즘에서 암호학적 보안을 감소시키는 결함들을 수정한 함수

   ->160비트의 해시값 출력 (16진수로 40바이트)

 

4) SHA-2 : SHA-224, SHA-256, SHA-384, SHA-512를 통칭한 함수

5) SHA-3 : SHA-1과 SHA-2를 대체하기 위해 기획된 함수

 

=>현재 MD5, SHA-0, SHA-1은 사용 금지되었고, SHA-2는 사용가능하지만 SHA-3를 사용권장하고 있다.

 

<파이썬 코드>

>>> import hashlib
>>> hashlib.algorithms_available
{'shake_128', 'shake_256', 'blake2b', 'md4', 'sha384', 'sha256', 'mdc2', 'sha512_224', 'blake2s', 'sha512', 'md5-sha1', 'sha3_512', 'sha224', 'md5', 'sha512_256', 'sm3', 'ripemd160', 'sha3_256', 'sha3_224', 'sha3_384', 'sha1', 'whirlpool'}
>>> hashlib.md5('hello'.encode()).hexdigest()
'5d41402abc4b2a76b9719d911017c592'
>>> len('5d41402abc4b2a76b9719d911017c592')
32
>>> hashlib.sha1('hello'.encode()).hexdigest()
'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d'
>>> len('aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d')
40
>>> hashlib.sha224('hello'.encode()).hexdigest()
'ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193'
>>> len('ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193')
56
>>> hashlib.sha256('hello'.encode()).hexdigest()
'2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824'
>>> len('2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824')
64
>>> hashlib.sha384('hello'.encode()).hexdigest()
'59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f'
>>> len('59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f')
96
>>> hashlib.sha512('hello'.encode()).hexdigest()
'9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043'
>>> len('9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043')
128
>>> hashlib.sha3_256('hello'.encode()).hexdigest()
'3338be694f50c5f338814986cdf0686453a888b84f424d792af4b9202398f392'
>>> hashlib.sha3_512('hello'.encode()).hexdigest()
'75d527c368f2efe848ecf6b073a36767800805e9eef2b1857d5f984f036eb6df891d75f72d9b154518c1cd58835286d1da9a38deba3de98b5a53e5ed78a84976'

 

 

 

참고

>>http://coashanee5.blogspot.com/2017/04/blog-post.html

>>http://wiki.hash.kr/index.php/SHA

'기초 다지기' 카테고리의 다른 글

.htaccess 파일이란 ?  (0) 2020.03.11
PHP addslashes(), magic_quotes_gpc  (0) 2020.02.25
2진수, 8진수, 16진수  (0) 2020.02.02
URL encoding을 해야하는 이유  (0) 2020.01.26
정규식 알아두기  (0) 2020.01.26