18910140161

python模块分析之hashlib加密

顺晟科技

2021-06-16 10:44:51

233

Hashlib模块是py3。0的字符串哈希加密模块。核心算法是md5,明文和密文是一一对应的关系。用于注册和登录期间用户名和密码的加密。

模块分析

Hashlib模块有几个加密算法,如:' MD5 ',' sha1 ',' sha224 ',' sha256 ',' sha384 ',' sha512 ',' blake2b ',' blake2s ',' sha3 _ 224 ',' sha3 _ 256 '

所有算法都是基于二进制加密的,所以需要先对要加密的字符串进行编码。

Hashlib。algorithms _保证查看所有平台支持的哈希算法;

Hashlib。algorithms _ available:查看所有哈希加密算法。

主要功能

Hashlib.hexdigest():获取加密的密文、十六进制字符串和无参数。

Hashlib.digest():获得加密的密文,二进制,无参数。

Hashlib.copy():复制当前创建的无参数哈希对象的副本。

更新(str1。encode(' utf-8 '):添加了一个新的加密密文,它不同于原始密文。

#创建加密对象

M=hashlib.new('md5 ',b'cai') #选择md5加密函数加密字符串“cai”

M.name:查看当前获取的hash对象的加密算法;

M.digest_size:hash密文占用多少字节;

M.block _ size:hash哈希数据块大小。

创建哈希对象

导入hashlib

M=hashlib.new('md5 ',b'cai') #是用new的方式创建的

M=hashlib.md5('cai '。encode()) #直接指定加密算法

m=hashlib.sha1('cai '。encode())

m=hashlib.sha224('cai '。encode())

m=hashlib.sha3_256('cai '。encode())

m=hashlib.sha3_384('cai '。encode())

多重加密

当要加密的字符串太大时,可以用同一个hash对象加密几次,update(a) update(b)=update(a b)。

将hashlib导入为hb

m=hb.md5()

m1=m.copy()

string='adbcefg '

对于字符串:中的s

m.update(s.encode('utf-8 '))

#输出密文1

print(m . hex digest())# 26 db 8 a 4092166 f 88 b 63 D8 bafd 34 ce 4b 1

#输出与密文1完全相同的密文2

m1.update(string.encode('utf-8 '))

print(m1 . hex digest())# 26 db 8 a 4092166 f 88 b 63 D8 bafd 34 ce 4b 1

哈希算法解密

加密算法得到的密文是不可逆的,但密文和明文是一一对应的关系,使得解密成为可能。目前处理密文比较简单、迭代次数少或不加盐的常用方法是用大数据存储密文和明文的对应关系。比如常用的解密网站:http://www.cmd5.com/

通过输入密文搜索对应的明文。为了增加破解难度,一般需要反复加密加盐密码。hashlib模块有一个特殊的函数pbkdf2_hmac。

pbkdf2_hmac

#参数

Hash_name:签名算法名;

密码:需要加密的二进制代码

盐:加盐

迭代:次迭代

将hashlib导入为hb

导入binascii

导入base64

pwd='fdskhfkshfks '

salt='hhhhhhhh '

#获取加密的二进制数

Dk=hb。pbkdf2 _ hmac ('sha256 ',pwd。encode ('utf-8 '),salt。编码(' utf-8 '),10000) #密码和杂质需要是二进制类型

print(dk)# b ' \ x13O \ xd5jj \ x92 \ xfd \ xf9 \ xef \ xaaW[c \ x06 \ xe0 \ x96D=\ x02R \ xd683 \ xee 8 \ X11 \ xfbX \ xb6 \ xf6 '

#转换为十六进制对应字符串

print(binascii.hexlify(dk)。解码(' utf-8 ')# 134 FD 56 a 6a 92 FD F9 efaa 3e 575 b 6306 e 096443d 260252d 63833 ee 3811 FB 58 b 6 f 6

#转换为base64编码字符串

print(base64.b64encode(dk))。decode())# E0/VAM QS/fnvqj5 w2m G4 jzepsycuty4m 44 eftytvy=

应用示例

将hashlib导入为hb

导入base64

def hash_fun(str1):

m=HB . MD5(str1 . encode(' utf-8 '))#创建一个哈希对象并加密str 1

#输出结果密文

print(m.hexdigest())

# base64编码密文

print(base64 . b64 encode(m . digest())。decode())

打印(m.block_size) #获取哈希块的大小

Print(m.digest_size) #获取密文的字节数

Print(m.name) #获取加密算法md5的名称

def hash_fun2(str1):

m=hb.md5(str1.encode('utf-8 '))

print(m.hexdigest())

A=m.copy() #复制一个哈希对象

通过print(a.hexdigest()) #得到的密文没有变化

hash_fun('sb ')

摘要

我们一般通过新的或者pbkdf2_hmac函数对字符串进行加密;

加密密文包括显示相应的十六进制字符串或base64编码字符串

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航