一、简介

Python的hashlib提供了常见的摘要算法,如MD5、SHA1、SHA224、SHA256、SHA384、SHA512等算法。

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

举个例子,你写了一篇文章,内容是一个字符串“how to use python hashlib – by mayi”,并附上这篇文章的摘要是“75b850b26f4e75b1ad3db76a255065f2”。如果有人篡改了你的文章,并发表为“how to use python hashlib – by bob”,你可以一下子指定bob篡改了你的文章,因为根据“how to use python hashlib – by bob”计算出的摘要不同于原始文章的摘要。

二、md5加密

import hashlib

hash = hashlib.md5()

hash.update("mayi".encode("utf-8"))

# 7d1080e20427559fcc0a647826741f66
print(hash.hexdigest())

三、sha1加密

import hashlib

hash = hashlib.sha1()

hash.update("mayi".encode("utf-8"))

# c159ce3114fb4553683cf96d91db6d51080c02e8
print(hash.hexdigest())

四、sha256加密

import hashlib

hash = hashlib.sha256()

hash.update("mayi".encode("utf-8"))

# 5dfae51e782cce2f213ef6bc89f75c9ab6c3bd8a5d1299a73191677cd5aa1f93
print(hash.hexdigest())

五、sha384加密

import hashlib

hash = hashlib.sha384()

hash.update("mayi".encode("utf-8"))

# a1eb5c52e830d5ea4fdb0a3dc2241374f56426aebacd8890a69c7db57724788ec5047a005ecff4a23310b7f87035926f
print(hash.hexdigest())

六、sha512加密

import hashlib

hash = hashlib.sha512()

hash.update("mayi".encode("utf-8"))

# 93102ec5658f739c060e3d82096e538ec116d0c9d6925119b465f0823be99697056518465cc6fe75265deb26632c8ce62b3d63a8782c492daac2b9c03a89defe
print(hash.hexdigest())

七、“加盐”加密

以上的加密算法虽然很厉害,但仍然存在缺陷,通过撞库可以反解。所以必要对加密算法中添加自定义key再来做加密。

import hashlib

hash = hashlib.md5('python'.encode('utf-8'))

hash.update("mayi".encode("utf-8"))

# b0758ad1aad20530044668775f389922
print(hash.hexdigest())

八、摘要算法应用

摘要算法能应用到什么地方?举个常用的例子:

任何允许用户登录的网站都会存储用户登录的用户名和密码。如何存储用户名和密码呢?方法是存到数据库表中:

name

password

mayi

123456

bob

abc123

alice

alice2019

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

正确的保存密码的方式是不存储用户的明文密码,而是存储用户密码的摘要,比如MD5:

name

password

mayi

e10adc3949ba59abbe56e057f20f883e

bob

e99a18c428cb38d5f260853678922e03

alice

02d740cd2a62024d20152c137e67ef65

当用户登录时,首先计算用户输入的明文密码的MD5,然后和数据库存储的MD5比较,如果一致,说明密码输入正确,否则,密码输入错误。

存储MD5的好处是即使运维人员能访问数据库,也无法获知用户的明文密码。

采用MD5存储密码是否就一定安全呢?也不一定。假设你是一个黑客,已经拿到存储MD5密码的数据库,如何通过MD5反推用户的明文密码呢?暴力破解费时费力,真正的黑客是不会这么干的。

考虑这么个情况,很多用户喜欢用“123456”、“888888”、“password”等这些简单的密码,于是,黑客可以事先计算出这些常用的密码的MD5值,得到一个反推表。这样,无需破解,只需要对比数据库的MD5,黑客就获得了使用常用密码的用户账号信息。

对于用户来讲,当然不要使用过于简单的密码。但是,我们能否在程序设计上对简单的密码加强保护呢?

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

常用模块 - hashlib模块的更多相关文章

  1. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  2. Python进阶(九)----json模块, pickle模块, os模块,sys模块,hashlib模块

    Python进阶----json模块, pickle模块, os模块,sys模块,hashlib模块 一丶序列化模块 什么是序列化: ​ 将一种数据结构,转换成一个特殊的序列(特殊字符串,用于网络传输 ...

  3. 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...

  4. python模块: hashlib模块, configparse模块, logging模块,collections模块

    一. hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用 ...

  5. day13 函数模块之序列化 random 模块 os模块 sys模块 hashlib模块 collections模块

    json import json dic = {'k1':'v1','k2':'v2','k3':'v3'} str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 ...

  6. python day 8: re模块补充,导入模块,hashlib模块,字符串格式化,模块知识拾遗,requests模块初识

    目录 python day 8 1. re模块补充 2. import模块导入 3. os模块 4. hashlib模块 5. 字符串格式:百分号法与format方法 6. 模块知识拾遗 7. req ...

  7. 4-20模块 序列化模块 hashlib模块

    1,模块,py文件就是模块,py之所以好用就是模块多. 2,模块的分类: 1,内置模块,python 安装时自带的模块 2,扩展模块,别人写好的,需要安装之后,可以直接使用.itchat微信模块, b ...

  8. python模块——hashlib模块(简单文件摘要算法实现)

    #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" # Usage: hashlib模块 import ...

  9. Python3 os模块&sys模块&hashlib模块

    ''' os模块 非常重要的模块 ''' import os # print(os.getcwd()) # 获取当前工作目录 # os.chdir(r'路径名') # 改变当前工作目录 # print ...

  10. 0420模块 序列化模块 hashlib模块

    复习:内置方法 __len__ len(obj)的结果依赖于obj.__len__()的结果,计算对象的长度__hash__ hash(obj)的结果依赖于obj.__hash__()的结果,计算对象 ...

随机推荐

  1. Sublime Text2中的快捷方式及html各种标签(待完善)

    快捷方式 1.xhtml+tab 2.自动补全标签 Alt + .  补全标签 标签 1.<p>段落标签 ,前后换行 <h1.2.3.4.5>标题标签 h1最大,一级标题 2. ...

  2. Struts CRUD

    Struts CRUD 利用struts完成增删改查 思路: 1.导入相关的pom依赖(struts.自定义标签库的依赖) 2.分页的tag类导入.z.tld.完成web.xml的配置 3.dao层去 ...

  3. js规范思维导图(仅限于自己)

  4. GCD(洛谷 2568)

    题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入格式 一个整数N 输出格式 答案 输入输出样例 输入 #1 4 输出 #1 4 说明/提示 ...

  5. 几句话总结一个算法之Q-Learning与Sarsa

    与Policy Gradients的不同之处在于,这两个算法评估某个状态s执行某个动作a的期望奖励,即Q(s,a) Q(s,a) 有两种方法计算方法,第一种直接查表或者模型预估,Q(s, a) = c ...

  6. 网卡监控脚本--nagios

    #!/usr/bin/python26#filename:check_traffic.py#the python script function  for monitoring network tra ...

  7. 【Gamma阶段】第八次Scrum Meeting

    冰多多团队-Gamma阶段第八次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 编辑器风格切换(添加夜间模式) UI界面手势切换 牛雅哲 添加pytorch训练dict和ssh工具 ...

  8. 【RabbitMQ学习之一】RabbitMQ入门

    环境 win7 rabbitmq-server-3.7.17 Erlang 22.1 RabbitMQ使用Erlang语言开发消息中间件.RabbitMQ基于AMQP(高级消息队列协议)协议,更适合业 ...

  9. Orm 常见查询实例

    一.Moon.Orm框架总述 (您还用hibernate?实体框架?) 1.框架名:Moon 意思是月亮,而非Mono.因为很喜欢明月,所以以此为名.它是一个.NET下的Orm框架. 2.发展历史:历 ...

  10. (转)MyBatis传入多个参数的问题

    背景:记录mybaitis的使用方法,博闻强记,后面尽量记忆使用. MyBatis传入多个参数的问题 MyBatis传入多个参数的问题 详细记录mybatis在传递多个参数时候的使用方法 关于Myba ...