연방 정보 처리 표준(FIPS)은 보안 해시 알고리즘 SHA1, SHA224, SHA256, SHA384 및 SHA512를 정의합니다. RSA Rivest, Shamir, Adleman의 성의 머리글자를 따서 만든 약어로 MD5 알고리즘을 정의합니다. 이전 알고리즘을 메시지 다이제스트라고 했습니다. 현대 용어는 보안 해시입니다.
hashlib 모듈은 다음 알고리즘을 구현하는 데 사용됩니다.
- md5
- 샤1
- 샤224
- sha256
- sha384
- 샤512
hashlib.new(이름[, 데이터])
원하는 알고리즘의 문자열 이름을 첫 번째 매개변수로 사용하는 일반 생성자입니다. 또한 위에 나열된 해시와 OpenSSL 라이브러리가 제공할 수 있는 기타 알고리즘에 대한 액세스를 허용하기 위해 존재합니다. 명명된 생성자는 new()보다 훨씬 빠르며 선호해야 합니다.
>>> hash = hashlib.new('md5',b'hello') >>> hash.hexdigest() '5d41402abc4b2a76b9719d911017c592' >>> import hashlib
개별 명명된 생성자 사용
>>> msg = hashlib.sha256() >>> msg.update(b'Simple is better than complex') >>> msg.digest() b'\xabz\xd8C(n\xb3\x8b\xf6\x0c\x0e\xf2\x81z\xd7\xf93\x835\xb2\xa1\x9cM\xb1S\x1f\xf7\xf9\x1av-F' >>> msg.block_size 64 >>> msg.hexdigest() 'ab7ad843286eb38bf60c0ef2817ad7f9338335b2a19c4db1531ff7f91a762d46' >>> msg = hashlib.md5() >>> msg.update(b'Simple is better than complex') >>> msg.hexdigest() 'fd34bb8fafd17f1a21d7bb6e38c8dc68'
해시 객체에는 다음과 같은 방법이 있습니다 -
업데이트() | 바이트열류 객체로 해시 객체를 업데이트합니다. m.업데이트(a); m.update(b)는 m.update(a+b)와 동일합니다. |
다이제스트() | 지금까지 update() 메서드에 전달된 데이터의 다이제스트를 반환합니다. |
hexdigest() | 다이제스트는 16진수만 포함하는 2배 길이의 문자열 객체로 반환됩니다. |
복사() | 해시 개체의 복사본을 반환합니다. 이것은 공통 초기 부분 문자열을 공유하는 데이터의 다이제스트를 계산하는 데 사용할 수 있습니다. |
Hashlib는 다음과 같은 속성을 제공합니다 -
보장된 알고리즘 | 모든 플랫폼에서 이 모듈이 지원하도록 보장된 해시 알고리즘의 이름을 포함하는 집합입니다. |
알고리즘_사용 가능 | 실행 중인 Python 인터프리터에서 사용할 수 있는 해시 알고리즘의 이름을 포함하는 집합입니다. |
다이제스트_크기 | 결과 해시의 크기(바이트)입니다. |
블록 크기 | 해시 알고리즘의 내부 블록 크기(바이트). |
이름 | 이 해시의 정식 이름으로, 항상 소문자이며 이 유형의 다른 해시를 생성하기 위한 new()의 매개변수로 항상 적합합니다. |
shake_128() 및shake_256() 알고리즘은 length_in_bits//2가 최대 128비트 또는 256비트 보안인 가변 길이 다이제스트를 제공합니다.
BLAKE2는 RFC 7693에 정의된 암호화 해시 함수로 두 가지 유형으로 제공됩니다.
- BLAKE2b는 64비트 플랫폼에 최적화되어 있으며 1~64바이트 사이의 모든 크기의 다이제스트를 생성합니다.
- BLAKE2는 8~32비트 플랫폼에 최적화되어 있으며 1~32바이트 사이의 모든 크기의 다이제스트를 생성합니다.