Python的hashlib提供了常见的摘要算法,如md5、sha1等

什么是摘要算法了?摘要算法又称哈希算法、散列算法。

它通过一个函数,把任意长度的数据转化魏一个长度固定的数据串(通常用十六进制的字符串表示)。

摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,可以来核对你想要的数据是否被篡改了。

摘要算法之所以能指出数据是否被篡改,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。

而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

我们以最常见的md5为例:

import hashlib
md5 = hashlib.md5() #选择摘要算法中的md5类进行实例化,得到md5
md5.update(b"everything is passible") #对一个字符串进行摘要
print(md5.hexdigest()) #找摘要算法要结果

计算结果如下:

a8c816f56c74b68e4d547769531a46d1

如果数据很大,可以分多次调用update()进行摘要,最后计算的结果是一样的:

import hashlib
md5 = hashlib.md5()
md5.update(b"everything")
md5.update(b" is passible")
print(md5.hexdigest())

md5是最常见的摘要算法,速度很快,生成结果是固定的128bit字节,通常用一个32位的16进制字符串表示。

另一种常见的摘要算法就是sha1,调用sha1和调用md5完全类似:

import hashlib
sha1 = hashlib.sha1()
sha1.update(b"everything is passible")
print(sha1.hexdigest())

计算结果:

000da64f15dce120bd685b189c3e169a1f67753b

sha1的结果是160bit字节,通常用一个40位的十六进制字符串表示。

比sha1更安全的算法是sha256和sha512,不过越安全的算法越慢,而且摘要长度更长。

hashlib一般在文件的一致性校验和加密认证这两方面使用的比较多。

由于常用口令的md5值很容易被计算出来,一般我们会添加一些操作,比如“加盐”,就是通过对原始口令加一个复杂字符串来实现。比如:

#前后加了一些特殊字符串,减少了出现的机率。
import hashlib
md5 = hashlib.md5()
md5.update(b"*)_#$%^&everything is passible%^&")
print(md5.hexdigest())

小结:

摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改和客户验证。

最新文章

  1. 深入理解 spring 容器,源码分析加载过程
  2. Java线程:创建与启动
  3. Javascript之旅——第六站:看看writable特性
  4. MySQL数据库恢复的经历。
  5. 10.24 noip模拟试题
  6. 获取C++类成员变量的地址偏移
  7. NS2仿真:公交车移动周期模型及性能分析
  8. objective-c中类似ruby枚举类的实例方法
  9. pom.xml配置,针对mvn clean install -P参数(环境参数)打包
  10. [UE4]C++代码实现播放粒子特效
  11. Junit测试中找不到junit.framework.testcase
  12. JAVA-JSP动作元素之plugin、params、fallback
  13. Python之进度条
  14. java如何调用另一个包里面的类
  15. hdu 5672 String 尺取法
  16. 【python】正则表达式-正则表达式常见的字符和符号表
  17. PAT 甲级 1154 Vertex Coloring
  18. LeetCode——House Robber
  19. DDoS攻防战 (四):CC攻击防御系统部署
  20. CentOS 安装python3.5

热门文章

  1. Linux 部署jenkins + svn + mavne + tomcat8自动化部署
  2. Redis入门经典——The Little Redis Book (翻译)
  3. windows下mysql表名不自动转换小写配置
  4. Consul实现原理系列文章2: 用Gossip来做集群成员管理和消息广播
  5. ThinkPHP 处理商品添加的时候操作多张表 用事务解决。
  6. SQLServer -- 竟然默认不区分大小写
  7. references non-existing project XXX, launch configuration问题的解决办法
  8. 椭圆参数方程中的θ(离心角Theta)
  9. 【剑指Offer面试题】 九度OJ1518:反转链表
  10. Linux下权限掩码umask