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

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

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

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

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

MD5算法计算出一个字符串的MD5值

import hashlibmd5 = hashlib.md5()
md5.update('how to use md5 in python hashlib?')
print (md5.hexdigest())
##
计算结果如下:
d26a53750bc40b38b65a520292f69306

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

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

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

SHA1算法

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:725638078
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import hashlibsha1 = hashlib.sha1()
sha1.update('how to use sha1 in ')
sha1.update('python hashlib?')
print sha1.hexdigest()

摘要算法应用:

任何允许用户登录的网站都会存储用户登录的用户名和口令。它们将用户名和口令存储在数据库表中。

如果以明文保存用户口令,如果数据库泄露,所有用户的口令就落入黑客的手里。此外,网站运维人员是可以访问数据库的,也就是能获取到所有用户的口令。

正确的保存口令的方式是不存储用户的明文口令,而是存储用户口令的摘要。

在程序设计上对简单口令加强保护:

由于常用口令的MD5值很容易被计算出来,所以,要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5,这一方法通过对原始口令加一个复杂字符串来实现,俗称“加盐”:

hashlib.md5("salt".encode("utf8"))

经过Salt处理的MD5口令,只要Salt不被黑客知道,即使用户输入简单口令,也很难通过MD5反推明文口令。

让使用相同口令的用户存储不同的MD5:

如果假定用户无法修改登录名,就可以通过把登录名作为Salt的一部分来计算MD5,从而实现相同口令的用户也存储不同的MD5。

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

但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。

Python常用模块之hashlib模块相关推荐

  1. python hashlib模块_python3 hashlib模块

    Python3 hashlib模块和hmac 模块(加密) hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha ...

  2. python常用内置模块-Python常用内置模块之xml模块

    xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.从结构上,很像HTML超文本标记语言.但他们被设计的目的是不同的,超文本标记语言被设计用来显示 ...

  3. python常用内置模块-Python常用内置模块之xml模块(详解)

    xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.从结构上,很像HTML超文本标记语言.但他们被设计的目的是不同的,超文本标记语言被设计用来显示 ...

  4. Py修行路 python基础 (二十)模块 time模块,random模块,hashlib模块,OS及sys模块...

    一.前提介绍: 可以开辟作用域的只有类,函数,和模块            for循环 if,else: 不能开辟自己的作用域 避免程序复用和重复调用,将这些写到一个.py文件中,做成一个模块,进行调 ...

  5. md5模块(Python内置模块)和hashlib模块

    转自https://my.oschina.net/duhaizhang/blog/67214 MD5模块用于产生消息摘要,康用来判断文件是否相同. python的md5模块使用非常简单,包括以下几个函 ...

  6. Python模块学习——hashlib模块讲解

    一:hashlib简介 1.什么叫hash: hash是一种算法(不同的hash算法只是复杂度不一样)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SH ...

  7. python中hashlib_python的hashlib模块

    #-*- coding: utf-8 -*- """python 的MD5 sha1 模块""" importhashlib#md5的例子 ...

  8. python之time模块和hashlib模块

    一.time模块 import time print(time.strftime('%Y-%m-%d %H:%M:%S'))#获取当前的格式化时间,time.strftime(format) prin ...

  9. Python攻克之路-hashlib模块

    hashlib模块 描述:加密模块,从明文加密成密文,主要是md5和sha md5 In [13]: import hashlib In [14]: m=hashlib.md5() In [15]: ...

  10. 序列化模块和hashlib模块

    一:序列化模块 1,什么叫序列化? 序列化就是将原本的字典.列表等内容转换成一个字符串.python中的序列化模块有 json,pickle,shelve. ps:能存储在文件中的一定是字符串或者是字 ...

最新文章

  1. Pytorch的backward()相关理解
  2. weblogic 的一些说明
  3. arcgis-把X Y点展到arcgis中的陷阱
  4. 创建用户赋权限_MySQL实战第84篇:MySQL数据库添加用户和赋权限,在8.0版本!
  5. Visual Studio 的代码片段(Code Snippet)功能
  6. oracle中区间大小,Oracle的逻辑结构(表空间、段、区间、块)——总结
  7. LeetCode 16.01 交换两数
  8. Kettle 之 javascript字段数据处理
  9. 在一家公司产生倦怠感,如何化解?
  10. atitit.ajax上传文件的实现原理 与设计
  11. cognos java_cognos开发心得
  12. 什么是存储器?存储器可分为哪三类?
  13. 2022年6月编程语言排行,第一名居然是它?!
  14. 3.100个渗透测试实战#3(Lampiao)
  15. 华为matepad切换电脑模式_华为MatePad Pro关于PC模式常用操作指南
  16. 【Google Play】创建和管理内部测试版本 ( 创建内部测试版本 | 检查并发布内部测试版本 )
  17. 2018云栖大会总结
  18. TLD(Tracking-Learning-Detection)一种目标跟踪算法
  19. html组织架构插件,jQuery组织架构图插件okrTree.js
  20. 任正非接班人李一男离开华为时给属下的忠告

热门文章

  1. 怎样隐藏“滚动条”?
  2. Fail2ban初识
  3. SQL JOIN的用法
  4. 示例演示数据压缩的效果
  5. Cacti 每日导出图形及流量报表 [未完成]
  6. iOS UUID配合keychain的替换方案实现
  7. 第六章apache目录文件的位置及作用
  8. Active Directory的复制拓扑,Active Directory系列之八
  9. 物流行业SAP整体解决方案
  10. ABAP中的动态运算函数