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

Python을 사용한 SHA 인코딩?

<시간/>

데이터 보안에 대한 모든 IT 회사의 주요 관심사 중 하나입니다. 데이터를 투영하고 확인하기 위해 여러 해싱 기술이 있습니다.

해시란 무엇입니까

해시는 가변 길이의 바이트 시퀀스를 입력으로 받아 고정 길이 시퀀스로 변환하는 함수입니다. 그러나 원래 데이터(입력 바이트)를 다시 가져오는 것은 쉽지 않습니다. 예를 들어 x가 입력이고 f가 f가 해싱 함수인 경우 f(x)를 계산하는 것은 빠르고 쉽지만 x를 다시 얻으려고 시도하는 것은 매우 시간이 많이 걸리는 작업입니다.

해시 함수의 반환 값을 해시, 체크섬, 해시 값 또는 메시지 다이제스트라고 합니다.

위와 같이 요약할 수 있습니다 -

Python을 사용한 SHA 인코딩?

"Hello World" 메시지를 sha1 해시 함수로 변환하려는 경우 결과는 다음과 같습니다. 0a4d55a8d778e5022fab701977c5d840bbc486d0,

Python을 사용한 SHA 인코딩?

실제 시나리오에서 해시 함수는 암호 및 더 많은 영역을 저장하기 위해 암호화 알고리즘, 디지털 서명, 지문에서 많이 사용됩니다. 파이썬 프로그래머로서 우리는 데이터 또는 파일의 이중성을 확인하고, 공용 네트워크를 통해 데이터를 전송할 때 데이터 무결성을 확인하고, 데이터베이스에 비밀번호를 저장하는 등의 해시 함수가 필요합니다.

주로 사용되는 두 가지 해시 함수 또는 알고리즘은 -

  • MD5 - MD5 또는 메시지 다이제스트 알고리즘은 128비트 해시 값을 생성합니다. md5 알고리즘에는 몇 가지 보안 문제가 있으므로 주로 데이터 무결성을 확인하는 데 사용합니다.

  • - 미국 연방 정보 처리 표준에 의해 개발된 알고리즘의 SHA 그룹에 속하는 여러 알고리즘이 있습니다. 이러한 알고리즘은 md5보다 훨씬 더 안전하므로 암호화 응용 프로그램을 비롯한 여러 영역에서 널리 사용됩니다. 이러한 알고리즘에 의해 생성된 메시지의 범위는 160비트에서 512비트입니다.

SHA1

SHA는 SHA1, SHA224, SHA256, SHA384, SHA512와 같은 알고리즘 그룹입니다. SHA1 알고리즘은 md5보다 더 안전한 것으로 간주되어 많은 영역에서 널리 사용됩니다.

먼저, 해싱 알고리즘을 사용하려면 hashlib 모듈을 가져오세요 -

hashlib 가져오기

이제 hashlib 모듈에서 필요한 알고리즘 또는 모든 알고리즘을 현재 사용할 수 있는지 확인하려면 −

>>> print(hashlib.algorithms_available){'sha3_256', 'sha3_224', 'sha1', 'blake2b', 'sha512', 'dsaEncryption', 'dsaWithSHA', 'DSA', 'md5', ' sha384', 'sha224', 'sha3_384', 'ecdsa-with-SHA1', 'DSA-SHA', 'SHA1', 'md4', 'SHA256', 'MD4', 'sha3_512', '월풀', ' sha256', 'shake_256', 'SHA', 'RIPEMD160', 'shake_128', 'SHA512', 'ripemd160', 'SHA224', 'sha', 'blake2s', 'SHA384', 

hashlib 모듈을 통해 사용할 수 있는 위의 알고리즘 목록에는 OpenSSL을 통한 알고리즘이 포함됩니다.

그러나 항상 사용 가능한 알고리즘 목록을 확인하려면 algorithm_guaranteed를 통해 확인할 수 있습니다.

>>> print(hashlib.algorithms_guaranteed){'sha3_512', 'sha256', 'sha3_256', 'shake_256', 'sha3_224', 'sha1', 'blake2b', 'sha512', 'md5' sha384', 'sha224', 'sha3_384', 'blake2s'}

sha1 알고리즘을 이해하는 간단한 프로그램을 만들어 보겠습니다.

hashlibhash_obj 가져오기 =hashlib.sha1(b'Hello, Python!')print(hash_obj.hexdigest())

출력

00d375a3693fde63e9540b91656c6ac5b5341f7c

그러나 반환된 바이트 시퀀스를 원하면 −

와 같이 hash_obj.diget()을 사용해야 합니다.
import hashlibhash_obj =hashlib.sha1(b'Hello, Python!')#생성하려면 바이트열 시퀀스(hash_obj.digest())

출력

b'\x00\xd3u\xa3i?\xdec\xe9T\x0b\x91elj\xc5\xb54\x1f|'

문자열 리터럴 앞에 'b'를 사용했음을 알 수 있습니다. 이것은 문자열에서 바이트를 생성하기 위한 것입니다. 해시 함수는 바이트 시퀀스만 매개변수로 허용합니다.

콘솔에서 문자열을 전달하려는 경우 문자열을 바이트 시퀀스로 인코딩하는 것을 잊지 마십시오 -

import hashlibmystring =input('해시할 문자열 입력:')hash_obj =hashlib.sha1(mystring.encode())print(hash_obj.hexdigest())

출력

해시할 문자열 입력:Hello, TutorialsPointb20d14ead3e50552fc1f1cd96696b111a163dffa