资讯专栏INFORMATION COLUMN

Python模块分析:第2节-hashlib加密模块

WalkerXu / 2263人阅读

摘要:上一篇文章模块分析第节模块下一篇文章模块分析第节模块模块是用来对字符串进行加密的模块,明文与密文是一一对应不变的关系用于注册登录时用户名密码等加密使用。一函数分析共有种加密算法,分别得到不同的加密密文。

上一篇文章:Python模块分析:第1节-random模块
下一篇文章:Python模块分析:第3节-typing模块

hashlib模块是用来对字符串进行hash加密的模块,明文与密文是一一对应不变的关系;用于注册、登录时用户名、密码等加密使用。

一、函数分析
1、共有5种加密算法

md5(),sha1(),sha224(),sha256(),sha3840(),sha512(),分别得到不同的加密密文。

2、hashlib.hexdigest():获取加密的密文,16进制,无参数
3、hashlib.digest():获取加密的密文,二进制,无参数
4、hashlib.copy():复制一份当前创建的hash对象,无参数
5、update(str1,encoding("utf-8"")):更新加密的密文,得到的密文与原来的密文不相同
6、hash.name:查看当前获得的hash对象的加密算法
7、hash.digest_size:hash密钥占多少个字节
8、hash.block_size:hash数据块的大小
9、hashlib.algorithms_guaranteed:查看所有平台都支持的hash算法
10、hashlib.algorithms_available:查看所有的hash加密算法

代码实例:

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"xeax82Ax0czx99x91x81k^xeexebxe1x95xe2
"
获取hash块的大小: 64
hash密钥占多少个字节: 16
查看当前获得的hash对象的加密算法 md5
获取加密的密文,16进制,无参数 ac673f4dbac79922838901b5974a419a
获取加密的密文,二进制,无参数: b"xacg?Mxbaxc7x99"x83x89x01xb5x97JAx9a"
获取hash块的大小: 64
hash密钥占多少个字节: 16
查看当前获得的hash对象的加密算法 md5
二、运用:
1、创建哈希对象,有两种方式:
m=hashlib.new("md5",b"cai")#选择md5加密函数加密字符串‘cai’
m=hashlib.md5("cai".encode("utf-8"))#加密的另一种写法
2、特性用法:当需要加密的字符串过大的时候,可以使用同一个hash对象分多次加密,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
三、hash算法加密

加密算法得到的密文不可逆,但是密文与明文之间的关系是一一对应的,这就使得解密出现了可能,使用大数据存储密文与明文对用关系,如果数据库内刚好有对应的密文,就可以找到明文完成解密,常用的解密网站: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模块分析:第1节-random模块
下一篇文章:Python模块分析:第3节-typing模块

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42643.html

相关文章

  • Python模块分析3-typing模块

    摘要:代码实例运行结果跟不用无异上一篇文章模块分析第节加密模块下一篇文章模块分析第节日志模块 上一篇文章:Python模块分析:第2节-hashlib加密模块下一篇文章:Python模块分析:第4节-logging日志模块 Python是一门弱类型的语言,很多时候我们可能不清楚函数参数类型或者返回值类型,很有可能导致一些类型没有指定方法,typing模块可以很好的解决这个问题。 该模块加入...

    wujl596 评论0 收藏0
  • Python模块分析1-random模块

    摘要:下一篇文章模块分析第节加密模块是产生伪随机数的模块,随机种子默认为系统时钟。核心源码时间复杂度实例结果下一篇文章模块分析第节加密模块 下一篇文章:Python模块分析:第2节-hashlib加密模块 random是Python产生伪随机数的模块,随机种子默认为系统时钟。下面分析模块中的方法: 1、random.randint(start,stop) 这是一个产生整数随机数的函数,参数...

    philadelphia 评论0 收藏0
  • Python常用模块hashlib模块——简单实现实现登录注册

    摘要:唯一要求使用中的进行加密请输入你的账号请输入你的密码加盐操作加密加密输入正确输入错误请输入你要注册的名字请输入你要注册的密码加密加密请输入你要执行的操作注册登录退出问题是 ...

    番茄西红柿 评论0 收藏2637
  • Python中MD5加密

    摘要:的作用是让大容量信息在用数字签名软件签署私人密钥前被压缩成一种保密的格式就是把一个任意长度的字节串变换成一定长的十六进制数字串。获取由位随机大小写字母数字组成的值每次从中随机取一位获取原始密码的值原始密码随机生成位加密后的密码 MD5是什么 下面的概念是百度百科的: Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列...

    chadLi 评论0 收藏0
  • python模块hashlib

    摘要:使用算法名称构造函数较使用更快所有平台的模块都支持的算法的名称集合。的结果集总是结果集的子集对象的字节长度对象的内部块大小对象的名称传递类字节参数通常是更新对象。表示的哈希摘要算法的名称,比如或。表示迭代次数,基于算法以及机器计算能力设置。 hashlib模块实现了多种安全哈希和信息摘要算法的通用接口,包括FIPS中定义的SHA1, SHA224, SHA256, SHA384, SH...

    luodongseu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<