第二十五篇 hashlib模块(* *)
用于加密相关的操作,Python 3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法。
加密复杂程度: SHA1 < SHA224 < SHA256 < SHA384 < SHA512 < MD5
加密越复杂,意味着消息的时间就越多。
哈希算法:把一个不定长的内容,加密变成一个定长的内容,而且与被加密内容是唯一对应的。
很常见的,我们在网银,淘宝,京东能都有账户密码,用户输入的时候都是明文,密码在传输的过程中,必须是密文,而不能是明文,同时数据库存的时候,必须存为可与明文唯一对应的加密后的值。
三个知识点:
1. 一个字符串可以转换成一段密文,并且不能被反解;
2. 既然不能反解,那只能正解,比如在登录的时候就让他们都变成密文,然后用两个密文进行比较
3. 原生写的MD5,全世界人都知道,所以可以进行加言,该加言只有开发者自己知道。对于需要加密的都是基于这个加言后的MD5进行的,别人也就无法反解了。
import hashlib obj = hashlib.md5() obj.update("hello".encode("utf-8"))
print(obj.hexdigest()) # 5d41402abc4b2a76b9719d911017c592
以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。
import hashlib obj = hashlib.md5("jiayan".encode("utf")) obj.update("hello".encode("utf-8"))
print(obj.hexdigest()) # 686a12bb5577133d6698131cbf0b4b4a
需要注意的:
先对"A"进行加密,接着在对"B"进行加密,"B"的加密是基于"A"的加密的。相当于"B"的加密对象是"AB"
import hashlib obj = hashlib.md5("jiayan".encode("utf")) obj.update("hello".encode("utf-8"))
print(obj.hexdigest()) # 686a12bb5577133d6698131cbf0b4b4a obj.update('world'.encode('utf8'))
print(obj.hexdigest()) # c805eca8aad002e5d44a39d3aec78f8e #上面对于"world"的加密,是基于Hello加密后,对"world"再进行加密的。 验证:
import hashlib obj = hashlib.md5("jiayan".encode("utf")) obj.update('world'.encode('utf8'))
print(obj.hexdigest())
# b278e99dfd536f7844785bbd39288e1a (没有"hello"时)
# c805eca8aad002e5d44a39d3aec78f8e (有"hello"时)
与没有注释"hello"的结果不一致,证明是基于hello加密后再进行加密的。 还可以通过下面的方法验证
import hashlib obj = hashlib.md5("jiayan".encode("utf")) obj.update('helloworld'.encode('utf8'))
print(obj.hexdigest())
# c805eca8aad002e5d44a39d3aec78f8e ("helloworld"连在一起时)
# c805eca8aad002e5d44a39d3aec78f8e (有"hello"时)
hashlib下还有SHA256等:
SHA256等其他加密算法的用法与MD5完全一样,只需要把MD5换成256等即可。
import hashlib obj = hashlib.sha256("jiayan".encode("utf-8"))
obj.update("hello".encode("utf-8"))
print(obj.hexdigest())
# 24ac0688c0d320346adc8cafd1ba543cf4332ed1e5fdd610edd5f7365b4a862f
第二十五篇 hashlib模块(* *)的更多相关文章
- Python之路(第十九篇)hashlib模块
一.hashlib模块 HASH Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值 ...
- Python之路【第二十五篇】:数据库之pymysql模块
数据库进阶 一.pymysql模块 pymysql是Python中操作Mysql的模块,其使用的方法和py2的MySQLdb几乎相同. 二.pymysql模块安装 pip install pymysq ...
- Python 学习 第十五篇:模块搜索路径和包导入
在导入自定义的模块时,除了指定模块名之外,也需要指定目录,由于Python把目录称作包,因此,这类导入被称为包导入.包导入把计算机上的目录变成Python的命名空间,而目录中所包含的子目录和模块文件则 ...
- 第二十五篇:在SOUI中做事件分发处理
不同的SOUI控件可以产生不同的事件.SOUI系统中提供了两种事件处理方式:事件订阅 + 事件处理映射表(参见第八篇:SOUI中控件事件的响应) 事件订阅由于直接将事件及事件处理函数连接,不存在事件分 ...
- Python之路(第二十五篇) 面向对象初级:反射、内置方法
[TOC] 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它 ...
- Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块
一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version . sys.maxint ...
- 第二十五篇 -- C++宝典中的图书管理系统
此篇文章是基于C++宝典写的图书管理系统,本人对其中的部分做了相应修改,并且以现有格式替代原有格式,使程序更加清晰明了.此程序运行在VS2017上. 系统设计 图书管理系统分为四个模块:图书管理模块. ...
- flask第二十五篇——控制语句
有兴趣的请加船长公众号:自动化测试实战 先和大家强调一个发邮件的问题 # coding: utf-8 import smtplib from email.mime.text import MIMETe ...
- 第二十五篇:使用 sigaction 函数实现可靠信号
前言 在前文中,讲述了一个可靠信号的示例.它分成几个步骤组成( 请参考前文 ).在 Linux 系统编程中,有个方法可以将这些步骤给集成起来,让我们使用起来更加的方便. 那就是调用 sigaction ...
随机推荐
- C# 利用HttpWebRequest进行HTTPS的post请求的示例
最近一个推送信息的目标接口从http格式换成https格式,原来的请求无法正常发送,所以修改了发送请求的方法.标红的代码是新加了,改了之后就可以正常访问(不检测证书的) public static s ...
- 【JeeSite】用户管理
组织机构使用ztree插件,加载数据时使用数据权限过滤(只能访问登录用户的单位及其下属单位), 点击部门加载相应用户. <!-- 数据范围过滤 --> BaseService.data ...
- 在CentOs6.5下安装Python2.7.6和Scrapy
总在网上看大家的安装教程,这回自己也贡献一份!!! 和民航大学合作项目,去给人家装环境,连简单的Scrapy都没装上,虽然有对方硬件设施坑爹的因素,但主要还是自己准备不充分. 一份好的安装文档应该是可 ...
- Redis的安装+哨兵模式+集群
Redis安装(基于2.8版本) 哨兵(Sentinel集群)模式: 集群(基于3.0+)
- 涉及自制系统AS的几个协议总结
IGP(Interior Gateway Protocol): 内部网关协议的总称:其下有RIP和OSPF EGP(External Gateway Protocol): 外部网关协议的总称:目前使用 ...
- WebGL学习笔记(2)
根据上一篇学习笔记,理解WebGL的工作原理及基本调用代码后,可以开始研究3D顶点对象的缩放.旋转.以及对对象进行可交互(鼠标或键盘控制)的旋转或者缩放. 要理解对象的旋转/缩放需要首先学习矩阵的计算 ...
- C++ push方法与push_back方法
[转载他人的文章,下午在搞c++,谢谢共享] [摘要] push与push_back是STL中常见的方法,都是向数据结构中添加元素.初识STL,对于添加元素的方法以产生混淆,这里暂对两种方法作出比较分 ...
- CPU运行的流程
- aix下oracle 12.1.0.2 asmca不能打开的故障
因为要添加一个新的13T磁盘组,所以决定通过asmca处理. 结果输入asmca之后,没有反应,前后两天都是如此. 第三天,IBM的存储工程师已经把心的MPIO挂上,如果还无法操作,只能使用asmcm ...
- 【Linux】wget: command not found的两种解决方法
1.rpm 安装 下载wget的RPM包: http://mirrors.163.com/centos/6.8/os/x86_64/Packages/wget-1.12-8.el6.x86_64.rp ...