>  기사  >  백엔드 개발  >  Python의 hashlib 암호화 모듈 분석(코드 예)

Python의 hashlib 암호화 모듈 분석(코드 예)

不言
不言앞으로
2018-11-23 17:01:182002검색
이 기사의 내용은 Python의 hashlib 암호화 모듈 분석(코드 예제)에 대한 것입니다. 이는 특정 참고 가치가 있으므로 도움이 될 수 있습니다.

hashlib 모듈은 문자열의 해시 암호화에 사용되는 모듈입니다. 일반 텍스트와 암호 텍스트가 일대일로 대응되며 등록 및 로그인 시 사용자 이름, 비밀번호 등을 암호화하는 데 사용됩니다.

1. 기능 분석

1. 서로 다른 암호화된 암호문을 얻기 위한 5가지 암호화 알고리즘

md5(), sha1(), sha224(), sha3840(), sha512() .

2. hashlib.hexdigest(): 매개변수 없이 암호화된 암호문을 가져옵니다

3. hashlib.digest(): 매개변수 없이 암호화된 암호문을 가져옵니다

4. 현재 생성된 해시 객체, 매개변수 없음

5. update(str1,encoding('utf-8'')): 암호화된 암호문을 업데이트합니다. 획득된 암호문은 원래 암호문과 다릅니다

6. 현재 획득한 해시 객체의 암호화 알고리즘

7. hash.digest_size: 해시 키가 차지하는 바이트 수

8. hash.block_size: 해시 데이터 블록의 크기

9. 해시 알고리즘을 봅니다. 모든 플랫폼에서 지원됩니다.

10. hashlib.algorithms_available: 모든 해시 암호화 알고리즘 보기

코드 예:

import hashlib

def hash_fun_1(str1):
    #创建一个hahsh对象并对str1加密
    m=hashlib.md5(str1.encode('utf-8'))
    print('获取加密的密文,16进制,无参数',m.hexdigest())
    print('获取加密的密文,二进制,无参数:',m.digest())
    print('获取hash块的大小:',m.block_size)
    print('hash密钥占多少个字节:',m.digest_size)
    print('查看当前获得的hash对象的加密算法',m.name)

    #更新密文
    m.update(str1.encode('utf-8'))
    print('获取加密的密文,16进制,无参数', m.hexdigest())
    print('获取加密的密文,二进制,无参数:', m.digest())
    print('获取hash块的大小:', m.block_size)
    print('hash密钥占多少个字节:', m.digest_size)
    print('查看当前获得的hash对象的加密算法', m.name)

if __name__ == '__main__':
    hash_fun_1('mark')

결과:

获取加密的密文,16进制,无参数 ea82410c7a9991816b5eeeebe195e20a
获取加密的密文,二进制,无参数: b'\xea\x82A\x0cz\x99\x91\x81k^\xee\xeb\xe1\x95\xe2\n'
获取hash块的大小: 64
hash密钥占多少个字节: 16
查看当前获得的hash对象的加密算法 md5
获取加密的密文,16进制,无参数 ac673f4dbac79922838901b5974a419a
获取加密的密文,二进制,无参数: b'\xacg?M\xba\xc7\x99"\x83\x89\x01\xb5\x97JA\x9a'
获取hash块的大小: 64
hash密钥占多少个字节: 16
查看当前获得的hash对象的加密算法 md5

2. 애플리케이션:

1. 해시 객체에는 두 가지 방법이 있습니다.

m=hashlib.new('md5',b'cai')#选择md5加密函数加密字符串‘cai’
m=hashlib.md5('cai'.encode('utf-8'))#加密的另一种写法

2. 기능 사용법: 암호화해야 할 문자열이 너무 큰 경우 동일한 해시 객체를 사용하여 여러 번 암호화할 수 있습니다. update(a)+update(b)=update( a+b)

예:

import hashlib

m1=hashlib.md5()
m2=m1.copy()
m1.update('a'.encode('utf-8'))
m1.update('b'.encode('utf-8'))
print(m1.hexdigest())#输出密文
m2.update('ab'.encode('utf-8'))
print(m2.hexdigest())#输出另一个密文

작업 결과:

187ef4436122d1cc2f40dc2b92f0eba0
187ef4436122d1cc2f40dc2b92f0eba0

3. 해시 알고리즘 암호화

암호화 알고리즘으로 얻은 암호문은 되돌릴 수 없지만 암호문과 평문의 관계는 일대일 대응이 됩니다. 암호문과 평문 사이의 관계를 저장하는 데 빅데이터가 사용됩니다. 데이터베이스에 해당 암호문이 있으면 평문을 찾아 복호화를 완료할 수 있습니다. http://www.cmd5. com /에 암호문을 입력하여 평문을 검색합니다.

크래킹 난이도를 높이려면 일반적으로 비밀번호를 여러 번 암호화해야 합니다. hashlib 모듈에는 전용 기능이 있습니다.

코드 예:

import hashlib
import binascii

#sha256为算法名称,12345678为要加密的密码
#mark指的是杂质,额外添加的东西,使得破解更难
#10 000是迭代次数,可以理解为加密次数
pwd=hashlib.pbkdf2_hmac('sha256',b'12345678',b'mark',10000)
print(binascii.hexlify(pwd).decode('utf-8'))

결과:

129d11e9ba1f3ef4e1393516d434f356363ffe68d7baca37fd1e91f0e87abe36

위 내용은 Python의 hashlib 암호화 모듈 분석(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제

관련 기사

더보기