python:hash模块

news/2024/7/7 15:25:29 标签: 哈希算法, python, 算法

一、了解hash

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

什么是摘要算法呢?摘要算法又称算法>哈希算法、散列算法它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)

摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。

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

加密算法与摘要算法的区别:加密可解密,摘要不可逆;

用法说明示例
md5.update()对数据进行摘要;入参的数据类型为字节串
md5.update('sxm'.encode())
md5.digest()对数据进行解析
md5.hexdigest()对数据解析成16进制

二、摘要算法案例

计算一个字符串的摘要值

python">import hashlib

md5 = hashlib.md5()
print(md5)  #新生成的一个md5对象
md5.update('sxm'.encode())
# md5.update(b'sxm')   # 使用b'字符串'仅支持ASCII码中包含的字符串
print(md5.digest(), len(md5.digest()))
# b'\xe2\x89\xa4\xd5z\x1a\x85\xb0g\xe9\x01Z\xd7E\xdc\x18' 16
print(md5.hexdigest(), len(md5.hexdigest()))
# e289a4d57a1a85b067e9015ad745dc18 32

如果数据量很大,可以分块多次调用update(),最后的结果是一样的;

md5 = hashlib.md5()
md5.update('how to use md5 in ')
md5.update('python hashlib?')
print md5.hexdigest()

MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似: 

python">import hsshlib

# SHA1算法
sha1 = hashlib.sha1()
sha1.update('sxm'.encode())
print(sha1.hexdigest(), len(sha1.hexdigest()))

SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。

三、摘要算法应用

数据库保存用户名密码,如果以明文保存用户口令,如果数据库泄露,所有用户的口令就落入黑客的手里。此外,网站运维人员是可以访问数据库的,也就是能获取到所有用户的口令。正确的保存口令的方式是不存储用户的明文口令,而是存储用户口令的摘要,比如MD5;

考虑这么个情况,很多用户喜欢用123456,888888,password这些简单的口令,于是,黑客可以事先计算出这些常用口令的MD5值,得到一个反推表;这样,黑客无需破解,就可以获得一些常用命令的md5值;

加盐:通过对原始口令加一个复杂字符串再进行摘要,以防止撞库;

 


http://www.niftyadmin.cn/n/1425336.html

相关文章

代码重构的方法和经验_why哥带你看看一个核心系统 3 万多行代码的重构之旅

经典著作《重构》这本书中有这么一段话:一开始,我所做的重构都停留在细枝末节上。随着代码趋向简洁,我发现自己可以看到一些设计层面的东西了,这些是我以前理解不到的,如果没有重构,我达不到这种高度。重构…

python:logging模块

一、basicConfig日志 1.案例 import logging# basicConf日志 LOG_FORMAT %(asctime)s %(name)s %(levelname)s %(pathname)s %(lineno)s %(message)s DATE_FORMAT %Y-%m-%d %H:%M:%S logging.basicConfig(levellogging.WARNING, #默认是WARNING级别formatLOG_FORMAT, …

python pyqt5获取文本框里输入的值_利用Python制作一个音乐播放器,堪比QQ音乐!...

导语利用Python制作一款简易音乐播放器,让我们愉快地开始吧~源代码python学习资料私信小编“01”即可获取!开发工具Python版本:3.6.4相关模块:pyqt5模块;以及一些Python自带的模块。环境搭建安装Python并添加到环境变量…

python:os模块

os模块是与操作系统交互的一个接口 用法说明os.getcwd()获取当前工作目录,即当前python脚本的工作目录os.chdir()改变当前脚本工作目录;相当于shell下的cdos.curdir返回当前目录os.pardir获取当前目录的父目录字符串名os.makedirs(dir1/dir2)创建多层递…

13.1.8 如何有选择的显示和隐藏组件

<h:panelGroup rendered"#{userBean.loggedIn}"> ... </h:panelGroup> <h:panelGroup rendered"#{!userBean.loggedIn}"> ... </h:panelGroup> 超过两个选项的情况&#xff0c;最好使用组件&#x…

用户dsn保存位置‘_超越DSN,港科大李铎与陈启峰提出DHM

本文首发于(极市平台)paper: https://arxiv.org/abs/2003.10739code: https://github.com/d-li14/DHM❝ 该文是港科大李铎、陈启峰提出的一种优化模型训练、提升模型泛化性能与模型精度的方法&#xff0c;相比之前Deeply-Supervised Networks方式&#xff0c;所提方法可以进一步…

python:sys模块

目录 应用案例&#xff1a; sys.argv传参过多时&#xff0c;如何获取参数&#xff1f; sys是与解释器相关信息的模块 用法说明sys.version获取python解释器的版本信息sys.plateform获取操作系统平台名称sys.path返回模块的搜索路径&#xff0c;初始化时使用PYTHONPATH环境变…

13.1.6 如何一次在一个页面中显示大型数据集

1&#xff09;向表格中添加滚动条 <div style"overflow:auto:width100%;height:200px;"> <h:dataTable.. > <h:column...> ... </h:column> </h:dataTable> …