Python hashlib模块详细
文章目录
- 模块简介
- hashilib 构造器
- hashlib.new() ---创建对象
- hash.digest_size
- hash.block_size
- hash.update() ---传入参数
- hash.digest() ---返回字节串对象
- hash.hexdigest() ---返回字符串对象
- 加密补充
- 加盐处理
模块简介
1. 这个模块针对许多不同的安全哈希和消息摘要算法实现了一个通用接口。
2. 什么是哈希(Hash)? 哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,简单的说就是通过
函数,将明文数据通过变成密文数据达到加密的作用。
3. 每种类型的 hash 都有一个构造器方法,它们都返回一个具有相同的简单接口的 hash 对象。 例如,使
用sha256() 创建一个 SHA-256 hash 对象。
4. 然后使用 update() 方法向这个对象输入' 字节类对象 (通常是 bytes) '。在任何时候你都可以使用
digest() 或 hexdigest() 方法获得到目前为止输入这个对象的拼接数据的 digest。
hashilib 构造器
此模块中常见 hash 算法构造器sha1(), sha224(), sha256(), sha384(), sha512(), blake2b() 和 blake2s()。 md5()在大部分平台上可用的还有 sha3_224(), sha3_256(), sha3_384(), sha3_512(), shake_128(), shake_256() 等等
如果需要获取构造器对象,我们可以直接引入模块 hashilib 后用点的方式生成,如下实例:代码示例import hashlibh = hashlib.md5()print(h)
打印结果<md5 _hashlib.HASH object @ 0x00000233D317EAD0>示例以 md5 为例,在模块名后用点的方式找到需要的算法构造器名称即可生成算法构造器对象。
hashlib.new() —创建对象
一个接受所希望的算法对应的字符串 name 作为第一个形参的通用构造器。
在 new() 括号中输入哈希构造器算法构造器的名称字符串相当于调用了构造器创建了一个对象。
此方法和上面写的用点的方式生成构造器对象结果是一样的。
语法格式hashlib.new(name, [data, ]*, usedforsecurity=True)
代码示例import hashlib h = hashlib.new('md5')print(h)打印结果<md5 _hashlib.HASH object @ 0x0000025FC95EEAD0>
hash.digest_size
以字节表示的结果哈希对象的大小。
代码示例import hashlibh = hashlib.md5()res1 = h.digest_sizeprint(res1)打印结果16返回该构造器的进制大小,md5 为16进制。
hash.block_size
以字节表示的哈希算法的内部块大小。
代码示例import hashlibh = hashlib.md5()res1 = h.block_sizeprint(res1)打印结果64
hash.update() —传入参数
用 byte类型
来更新哈希对象。
代码示例一import hashlibh = hashlib.md5()h.update(b'abcdefg') # 将字节型对象传入哈希对象res = h.hexdigest()print(res)打印结果7ac66c0f148de9519b8bd264312c4d641. 调用 md5() 生成哈希对象,使用方法 update 输入需要被加密的对象,需要注意必须为'字节型数据',
2. 如何获得字节型对象?可以使用字符串的内置方法 encode() 转化为字节型。或者,当字符串为英文或
者纯数字组成,只要在字符串引号外加上' b '也可以转化成字节型。
重复调用相当于单次调用并传入所有参数的拼接结果: m.update(a); m.update(b) 等价于 m.update(a+b)
代码示例二import hashlibh = hashlib.md5()h.update(b'abcd') # 传一次 b'abcd' 再传一次 b'efg' 结果和传一次 b'abcdefg'一样h.update(b'efg')res = h.hexdigest()print(res)打印结果7ac66c0f148de9519b8bd264312c4d64结果和示例一中的值一样。
hash.digest() —返回字节串对象
返回当前已传给 update() 方法的数据摘要。 这是一个大小为 digest_size 的字节串对象。
也就是说返回被加密后的字节串对象。
代码示例import hashlibh = hashlib.md5()h.update(b'abcdefg')res = h.digest()print(res)打印结果b'z\xc6l\x0f\x14\x8d\xe9Q\x9b\x8b\xd2d1,Md'
hash.hexdigest() —返回字符串对象
类似于 digest() 但摘要会以两倍长度字符串对象的形式返回,其中仅包含十六进制数码。 这可以被用于在
电子邮件或其他非二进制环境中安全地交换数据值。
代码示例import hashlibh = hashlib.md5()h.update(b'abcdefg')res = h.hexdigest()print(res)打印结果7ac66c0f148de9519b8bd264312c4d64
加密补充
数据被加密后是不能被直接解密的,网站上的解密一般都是暴力解密,不断地在猜在试有可能得出结果。
加盐处理
我们还可以通过加盐操作来提高破解数据的难度,加盐其实就是在真正要被加密的数据中添加其他数据。
代码示例import hashlibh = hashlib.md5()h.update('你好帅'.encode('utf8')) # 假设为真实数据h.update(b'asgxfajchdvb') # 随便打的数据res = h.hexdigest()print(res)打印结果ef77c21d860c3ccf4aed6e52720c8e42因为 update 调用多次和调用一次的结果相同,我们可以把真假数据分开。
如果把假数据删除,结果是:195eaff9c88bceae9f094f5ef322e5da
所以实现了对加密程度的升级。
动态加盐
我们可以不将假数据写死,可以通过变量实现动态加盐,变量值可以是时间、用户名的部分...
代码示例import hashlibx = 'asgxfajchdvb'h = hashlib.md5()h.update('你好帅'.encode('utf8'))h.update(x.encode('utf8'))res = h.hexdigest()print(res)打印结果ef77c21d860c3ccf4aed6e52720c8e42和写死的结果一样。
加密应用场景
加密应用场景
1. 密码加密如何比对用户输入是明文但是到了程序里面之后会采用相同的加密算法变成密文之后拿着密文与跟数据库里面的密文比对如果一致就是密码正确不一致就是错误2. 文件内容一致性校验作为软件的提供者,提供安全软件的同时会对给该软件内容做加密处理得到一个该安全软件独有的密文用户在下载软件之后也会对内容做相同的加密之后比对两次密文是否一致如果相同表示中途没有被修改,如果不是表示中途被修改过,可能存在病毒 3. 针对大文件一致性校验的优化策略如果一个文件很大,那么如果全部读取并加密速度太慢这个时候可以考虑对文件内容进行切片读取并加密的操作
Python hashlib模块详细相关推荐
- python hashlib模块_python3 hashlib模块
Python3 hashlib模块和hmac 模块(加密) hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha ...
- Python hashlib模块中的sha加密
Python hashlib模块中的sha加密 一.sha简介 sha (Secure Hash Algorithm)模块与md5的作用相似,用于对信息进行加密. "Secure Hash ...
- 使用python hashlib模块给明文字符串加密,以及如何撞库破解密码
文章目录: 1 hashlib介绍 2 hashlib模块使用 2.1 查看hashlib中有哪些hash算法 2.2 对字符串进行加密 2.3 对于数据比较大,加密可以分块,结果一样 2.4 has ...
- python hashlib模块安装_python hashlib 模块
hashlib模块用于加密相关的操作,代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法. 在python3中已经废弃了md5和sha模 ...
- python hashlib模块_Python之hashlib模块的使用
hashlib模块主要的作用: 加密保护消息安全,常用的加密算法如MD5,SHA1等. 1.查看可用的算法有哪些 #!/usr/bin/env python#-*- coding: utf-8 -*- ...
- python hashlib模块(提供常见摘要算法)
参考文章1:尝试修改LabelImg,将以对顶角画框改成以对角线相交点画框 参考文章2:python hashlib 详解
- Python——hashlib模块(MD5校验)
摘要 主要是在python中使用MD5对下载后的文件是否完整进行校验. hashlib的基本概念 hash是一种算法,不同hash算法只是复杂度不一样.在python 3.x里代替了md5模块和sha ...
- python os模块详细_Python文件系统功能--os模块详解
文件系统功能:os模块内置属性方法 1.目录相关 chdir():改变工作目录 chroot(): 设定当前进程的根目录 listdir(): 列出指定目录下的所有文件名 mkdir(): 创建指定目 ...
- python os模块详细用法
os 模块提供了非常丰富的方法用来处理文件和目录 os关于目录路径的方法 # 获取当前路径 path = os.getcwd()# 获取当前绝对路径 os.path.abspath(path)# 创建 ...
最新文章
- cve-2019-1821 思科 Cisco Prime 企业局域网管理器 远程代码执行 漏洞分析
- Android开发--详解ContentProvider/Cursor的使用
- [原创] Matlab 指派问题模型代码
- linux命令(51):set 指定行,直接替换并修改文件
- 探寻教育信息化着力点,创新四川省教育厅IT管理
- IoC组件Unity再续~根据类型字符串动态生产对象
- 设计模式------观察者模式
- .NET Core跨平台的奥秘[下篇]:全新的布局
- rds基于什么开发_java rds
- 听说Mutex源码是出名的不好看,我不信,来试一下
- html dom子节点,HTML DOM 节点
- 国内开源镜像(下载Linux系统)
- vs离线安装Qt开发插件vsix
- XJOI 7623 maoge数
- NSX-T业务转发04—— 多层Tier0Tier1路由
- 管家婆财贸双全存货核算类型对应会计科目禁止删除
- Photoshop图片秒变素描方法,非常简单
- c语言spoc测验成绩比重,SPOC混合教学模式在C语言程序设计课程的应用
- 微软输入法和搜狗输入法中的双拼
- win7或者win10碰到需要administrator权限才能删除的解决办法
热门文章
- 根据经纬度实现附近搜索Java实现
- 二层交换三层交换路由器区别
- VUE实现记事本功能
- html语言的居中代码怎么写,html中代码文字居中怎么写?
- 配置Redis哨兵模式
- Android如何动态申请权限(打电话)
- python __all__用法
- 学计算机的怎样当老师,“年薪50万,不如安心当老师”,过来人揭开千万人报考教资的真相...
- CS224n-winter2019 exploring_word_vectors
- Qt之opengl画钻石