(十九)hashlib模块

hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

注意:md5和sha256算法都是单向加密,即明文加密为密文后,密文无法再解密回明文

适合应用场景:用户的密码需要加密后才能入库

import hashlib
m = hashlib.md5()                      #使用md5算法,没有加盐;如果是sha256算法:hashlib.sha256()
m.update('hello'.encode('utf8'))       #对'hello'加密
print(m.hexdigest())                   #打印加密后的密文m1 = hashlib.md5()
m1.update('hello'.encode('utf8'))
print(m1.hexdigest())
结果:

5d41402abc4b2a76b9719d911017c592
5d41402abc4b2a76b9719d911017c592

可见,通过这种方式,一个不定长的字符串可以加密变为一个定长的密文,而这个明文和密文永远是一一对应的关系,即'hello'通过md5加密后的密文一定是5d41402abc4b2a76b9719d911017c592

有人把这种一一对应的关系收集记录(特别是常用的字符串),放入一个数据库,通过撞库就可以解密MD5,比如我们常用的https://www.cmd5.com/

所以有必要对加密算法中添加自定义key再来做加密,即加盐

m = hashlib.md5('nba'.encode('utf8'))     #'nba'就是加盐,没有加盐的时候hashlib.md5()方法不带参数
m.update('hello'.encode('utf8'))
print(m.hexdigest())
结果:444d0cc8a2d942f881bc85f5a31eced0

用上面这个密文结果去https://www.cmd5.com/解密是无法得到明文的

 需要注意的是,同一个hashlib对象的加密是连续叠加的:

m = hashlib.md5()
m.update('hello'.encode('utf8'))      #m对象先对'hello'加密
print(m.hexdigest())                  #这个密文是'hello'的
m.update('nick'.encode('utf8'))       #m对象再对'nick'加密
print(m.hexdigest())                  #这个密文不是'nick'的,而是'hellonick'的m2 = hashlib.md5()
m2.update('hellonick'.encode('utf8'))
print(m2.hexdigest())
结果:

5d41402abc4b2a76b9719d911017c592
d29690d65b7fdc3308b016f7a26cde94
d29690d65b7fdc3308b016f7a26cde94

 

转载于:https://www.cnblogs.com/xulan0922/p/10312171.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[vue] 第一次加载页面时会触发哪几个钩子?

[vue] 第一次加载页面时会触发哪几个钩子? beforeCreate, created, beforeMount, mounted个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

Python贪婪算法

贪婪算法 每步均选择局部的最优解,重复此过程,最终即得到全局的最优解简而言之就是每步都采用最优解优点: 简单易行缺点: 并非在所有情况下都奏效经典的问题: 背包问题集合覆盖问题贪婪算法下的近似算法解决集合覆盖问…

[vue] DOM渲染在哪个周期中就已经完成了?

[vue] DOM渲染在哪个周期中就已经完成了? mounted生命周期个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

[vue] 说说你对SPA单页面的理解,它的优缺点分别是什么?

[vue] 说说你对SPA单页面的理解,它的优缺点分别是什么? 介绍:SPA应用就是一个web应用,可理解为:是一种只需要将单个页面加载到服务器之中的web应用程序。当浏览器向服务器发出第一个请求时,服务器会返回一…

UVA - 208 Firetruck(并查集+dfs)

题目: 给出一个结点d和一个无向图中所有的边,按字典序输出这个无向图中所有从1到d的路径。 思路: 1.看到紫书上的提示,如果不预先判断结点1是否能直接到达结点d,上来就直接dfs搜索的话会超时,于是就想到了用…

[vue] SPA单页面的实现方式有哪些?

[vue] SPA单页面的实现方式有哪些? 1.监听地址栏中hash变化驱动界面变化2.用pushsate记录浏览器的历史,驱动界面发送变化3.直接在界面用普通事件驱动界面变化它们都是遵循同一种原则:div 的显示与隐藏个人简介 我是歌谣,欢迎和大…

2019 CCPC-Wannafly Winter Camp Div2 Day1

补题进度 7/11 J 夺宝奇兵 范围较小&#xff0c;直接枚举靠多少票赢即可&#xff0c;不够的票从小到大买 #include<bits/stdc.h> #define ll long long const int maxn 1005; using namespace std; struct node {ll id,val;int pos; }p[maxn],P[maxn]; bool vis[maxn]; …

根据输入的日期计算周次和月份

需求&#xff1a; 1.根据输入的日期拆分成按周或按月显示 2.规定周的开始日期从星期一开始&#xff0c;星期日结束 3.不足7天的一周&#xff0c;如果小于2天&#xff0c;则合并到上周或下周&#xff1b;大于2天的则自成一周 代码&#xff1a; CREATE OR REPLACE PROCEDURE …

[vue] 写出多种定义组件模板的方法

[vue] 写出多种定义组件模板的方法 1、字符串 2、模板字面量 3、<script type"x-template"></script> 4、文件组件模板 5、inline-template个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大…

[vue] 如何实现一个虚拟DOM?说说你的思路

[vue] 如何实现一个虚拟DOM&#xff1f;说说你的思路 虚拟DOM本身是一个JavaScript对象模拟真实DOM &#xff0c;用对象的属性去描述一个DOM节点&#xff0c;最终也只是一个真实DOM的映射个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c;…

oracle 日期计算

--计算当前日期的上周时间段 select (trunc(sysdate-7,DD)-to_char(sysdate-7,D)1) as last_week_start_date,(trunc(sysdate-7,DD)-to_char(sysdate-7,D)7) as last_week_end_date from dual --根据年、月、周、星期计算日期 CREATE OR REPLACE FUNCTION get_date(y n…

Android项目实战欢迎界面

欢迎界面 首先同理把欢迎界面的图片导入到drawable目录下&#xff0c;在导入时 Android Studio 会提示如下 drawable 具体本人尚未弄明白&#xff0c;待理解后会重新补全本部分内容&#xff0c;在此本人选了第一个 然后创建一个包名为activity的包&#xff0c;在activity下创建…

[vue] 怎么捕获组件vue的错误信息?

[vue] 怎么捕获组件vue的错误信息&#xff1f; errorHandler个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

flume记录(2)监控文件和目录,对hdfs操作

flume-ng agent --conf-file filename --name a1 -Dflume.root.loggerINFO,console 监控某个文件&#xff1a;配制如下 # Name the components on this agent a1.sources r1 a1.sinks k1 a1.channels c1# Describe/configure the source            进行如下配制…

Oracle中5个核心Sql语句的基本构造:Select、Insert、Update、Delete和Merge

Sql语言提供了很多不同的选择来得到同样的结果集&#xff0c;关键是需要搞清楚在不同的使用场景下哪种构造是最高效的。 1.Select语句 Select语句用来从一个表中&#xff0c;或者其他数据库对象中提取数据。 select <column list> from <table or view> where <…

[vue] 如果将axios异步请求同步化处理?

[vue] 如果将axios异步请求同步化处理&#xff1f; // 统一处理axios请求async getHistoryData (data) {try {let res await axios.get(/api/survey/list/, {params: data})this.tableData res.data.resultthis.totalData res.data.count} catch (err) {console.log(err)al…

在Airtest中如何使用无线模式控制手机

在Airtest中如何使用无线模式控制手机 在使用Airtest超快速开发App爬虫文章的最后&#xff0c;我们留了一个尾巴&#xff1a;如何启动Airtest的无线模式&#xff0c;不用USB线就能控制手机&#xff1f; 本文将会讲到具体的做法。做法分为两种&#xff1a;第一种是在Airtest的ID…

[vue] 说说你对vue的extend(构造器)的理解,它主要是用来做什么的?

[vue] 说说你对vue的extend&#xff08;构造器&#xff09;的理解&#xff0c;它主要是用来做什么的&#xff1f; extend的作用是继承当前的Vue类&#xff0c;传入一个extendOption生成一个新的构造函数。在extend的时候会进行mergeOption&#xff0c;融合Vue原型上的baseOpti…

使用Oracle做定时任务

declare jobno number;begin dbms_job.submit(jobno,cx_qcsiteadmin_db.qp_pre_load_report;,trunc(sysdate),trunc(sysdate)1);--每天零点更新 commit;end;

tab页

图片&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <style type"text/css"> /* 上边tab */ html {font-size: 14px }body {margin: 0;padding:…