Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python(hashlib)을 사용하여 해시 및 메시지 다이제스트 보안


연방 정보 처리 표준(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바이트 사이의 모든 크기의 다이제스트를 생성합니다.