python常用模块:hashlib

1、简介

  python中hashlib用于加密相关的操作,代替了MD5模块和sha模块,主要提供了sha1、sha224、sha256、sha384、sha512摘要算法。另外,模块中所定义的new(name,string=)方法可以指定系统所支持的hash算法来构造相应的hash对象。

  摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个固定长度的字符串(通常用16进制的字符串表示)。摘要算法就是通过摘要函数对任意长度的数据计算出固定长度的摘要,来确定原始数据是否被人篡改过。

 摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data确非常困难,而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

2、算法说明

     md5是最常见的摘要算法,速度很快,生成结果是固定的128bit字节,通常用一个32位的16进制字符串表示;sha1的结果是固定的160bit字节,通常用一个40位的16进制字符串表示;sha224的结果是固定的224bit字节,通常用一个56位的16进制字符串表示;sha256的结果是固定的256bit字节,通常用一个56位的64进制字符串表示;sha384的结果是固定的384bit字节,通常用一个96位的16进制字符串表示;sha512的结果是固定的512bit字节,通常用一个128位的16进制字符串表示。摘要长度越长,安全,但摘要计算的时间越长。

3、算法应用

3.1、md5

        我们用md5算法计算出‘12345678’字符串的md5值。

import hashlib

md5 = hashlib.md5()#创建对象
md5.update('12345678'.encode('utf-8'))#python2 和python3版本的编码方式不同,添加对象时需要指定编码
#以二进制格式显示加密信息
print(md5.digest())#b'%\xd5Z\xd2\x83\xaa@\n\xf4d\xc7mq<\x07\xad'
#以16进制格式显示加密信息(常用)
print(md5.hexdigest())#'25d55ad283aa400af464c76d713c07ad'

    如果字符串数据量很大,可以分块多次调用update(),最后计算的结果是一样的:

import hashlib

md5 = hashlib.md5()
md5.update('1234'.encode('utf-8'))
md5.update('5678'.encode('utf-8'))

print(md5.hexdigest())#'25d55ad283aa400af464c76d713c07ad'

3.2、sha1

sha1 = hashlib.sha1()
sha1.update('12345678'.encode(encoding='utf-8'))

print(sha1.hexdigest())#7c222fb2927d828af22f592134e8932480637c0d
3.3、sha224
sha224 = hashlib.sha224()
sha224.update('12345678'.encode(encoding='utf-8'))

print(sha224.hexdigest())#7e6a4309ddf6e8866679f61ace4f621b0e3455ebac2e831a60f13cd1

3.4、sha256

sha256 = hashlib.sha256()
sha256.update('12345678'.encode(encoding='utf-8'))

print(sha256.hexdigest())#

3.5、sha384

sha384 = hashlib.sha384()
sha384.update('12345678'.encode(encoding='utf-8'))

print(sha384.hexdigest())#

3.5、sha512

sha512 = hashlib.sha512()
sha512.update('12345678'.encode(encoding='utf-8'))

print(sha512.hexdigest())#

3.6、'加盐'加密

        以上加密算法虽然很厉害,但仍然存在缺陷,通过撞库可以反解。所以需要通过对原始数据加一个复杂的字符串来实现,俗称:“加盐”。

######  md5 加密 ############
salt_md5 = hashlib.md5('python'.encode('utf-8'))
salt_md5.update('12345678'.encode('utf-8'))
print(salt_md5.hexdigest())#c52485a83d16c5be45cabecca97a02c2

4、hmac加密

     该模块加密是先把数据存储到字典中,然后再进行加密,方法与上述方法类似。

import hmac
hm = hmac.new(b'abc')
hm = hmac.new('萨芬'.encode(encoding='utf-8'),b'bads')

print(hm.hexdigest())#926c20425656d4dc4b5443d43fe55e81



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值