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'}
참고 :md5
는algorithms_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 진수 만 포함하는 다이제스트의 문자열 객체를 반환합니다.