Python의 MD5 해시

TJ Lerias 2023년1월30일
  1. 해시 란?
  2. MD5 란?
  3. Python hashlib모듈
  4. Python에서 MD5 알고리즘 사용
Python의 MD5 해시

이 기사는 Python hashlib모듈을 사용하여 MD5 해시를 사용하는 방법을 보여줍니다.

해시 란?

해시는 가변 길이의 데이터를 가져와 고정 길이로 변환하는 함수입니다. 해시 함수에서 반환 된 값을 해시 값, 해시 코드 또는 다이제스트라고합니다. 해시 값은 일반적으로 해시 테이블이라고하는 고정 크기 테이블을 인덱싱하는 데 사용됩니다.

MD5 란?

MD5 메시지 다이제스트 알고리즘은 128 비트 해시 값을 생성하는 인기있는 해시 함수입니다. 처음에는 암호화 해시 함수로 설계되었지만 이제는 여러 보안 문제와 취약성으로 인한 데이터 무결성을 확인하는 데 일반적으로 사용됩니다.

Python hashlib모듈

Python 표준 라이브러리는hashlib라고하는 다양한 보안 해시 및 메시지 다이제스트 알고리즘을 구현하는 모듈로 구성됩니다. Python이 플랫폼에서 사용하는 OpenSSL 라이브러리에 따라 사용 가능한 추가 알고리즘도 포함될 수 있습니다.

해싱 알고리즘을 사용하려면hashlib모듈을 가져 오십시오.

import hashlib

이제이 모듈에서 지원하는 해싱 알고리즘을 사용할 수 있습니다. 실행중인 Python 인터프리터에서 사용 가능한 해시 알고리즘을 확인하려면 상수 속성algorithms_available을 사용합니다.

import hashlib

print(hashlib.algorithms_available)

출력:

{'md5', 'blake2s', 'sha256', 'sha384', 'sha3_512', 'blake2b', 'md4', 'md5-sha1', 'sha512_224', 'sha224', 'sha3_224', 'ripemd160', 'sha3_256', 'shake_256', 'sm3', 'shake_128', 'sha3_384', 'sha1', 'sha512_256', 'whirlpool', 'sha512'}

위 목록은 사용 가능한 OpenSSL 알고리즘을 포함하여hashlib에서 사용 가능한 알고리즘입니다.

이 모듈에서 모든 플랫폼에서 지원되는 해시 알고리즘을 확인하려면 상수 속성algorithms_guaranteed를 사용하십시오.

import hashlib

print(hashlib.algorithms_guaranteed)

출력:

{'sha3_256', 'sha256', 'sha3_224', 'sha224', 'blake2s', 'sha3_512', 'shake_128', 'sha512', 'sha3_384', 'shake_256', 'md5', 'blake2b', 'sha384', 'sha1'}

참고 :md5algorithms_guaranteed목록에 있지만 일부 FIPS 준수업스트림 공급 업체는이를 제외하는 Python 빌드를 제공합니다.

Python에서 MD5 알고리즘 사용

md5 알고리즘을 사용하기 위해md5()생성자를 사용하고update()메소드를 사용하여 해시 객체에 바이트 류 객체를 공급하거나 생성자의 매개 변수로 데이터를 전달합니다.

해시 값을 얻으려면 해시 개체에 제공된 데이터의bytes개체 다이제스트를 반환하는digest()메서드를 사용합니다.

import hashlib

md5_hash = hashlib.md5()
md5_hash.update(b"Hello World")

print(md5_hash.digest())

출력:

b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'

생성자에 매개 변수로 데이터를 전달하고 해시 값을 얻을 수도 있습니다.

import hashlib

print(hashlib.md5(b"Hello World").digest())

출력:

b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'

digest()메소드와 유사하게, 16 진수 만 포함하는 다이제스트의 문자열 객체를 반환하는hexdigest()를 사용할 수도 있습니다.

import hashlib

md5_hash = hashlib.md5()
md5_hash.update(b"Hello World")

print(md5_hash.hexdigest())

출력:

b10a8db164e0754105b7a99be72e3fe5

update()메소드에 전달 된 문자열 리터럴 앞에b가 있습니다. str유형 대신bytes유형의 인스턴스를 작성하는 데 사용됩니다. 해싱 함수는 매개 변수로 바이트 시퀀스 만 허용합니다. update()메소드에 문자열 객체 전달은 지원되지 않습니다.

update()메소드를 여러 번 호출 할 수도 있습니다. 이는 모든 인수가 연결되는 단일 호출과 동일합니다.

import hashlib

first_hash = hashlib.md5()
first_hash.update(b"Hello World, Hello Python")
print(first_hash.hexdigest())

second_hash = hashlib.md5()
second_hash.update(b"Hello World,")
second_hash.update(b" Hello Python")
print(second_hash.hexdigest())

출력:

b0f2921c8c0e63898b0388777908893a
b0f2921c8c0e63898b0388777908893a

요약하면,md5생성자의 매개 변수로 전달하거나update()메소드를 사용하여 데이터를 공급할 수있는hashlib모듈을 통해md5()해시 알고리즘을 사용할 수 있습니다. digest()메서드를 사용하여 해시 값을 얻을 수 있습니다.이 메서드는digest()또는hexdigest()메서드의bytes객체를 반환합니다.이 메서드는 16 진수 만 포함하는 다이제스트의 문자열 객체를 반환합니다.