用于加密相关的操作,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模块(* *)的更多相关文章

  1. Python之路(第十九篇)hashlib模块

    一.hashlib模块 HASH Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值 ...

  2. Python之路【第二十五篇】:数据库之pymysql模块

    数据库进阶 一.pymysql模块 pymysql是Python中操作Mysql的模块,其使用的方法和py2的MySQLdb几乎相同. 二.pymysql模块安装 pip install pymysq ...

  3. Python 学习 第十五篇:模块搜索路径和包导入

    在导入自定义的模块时,除了指定模块名之外,也需要指定目录,由于Python把目录称作包,因此,这类导入被称为包导入.包导入把计算机上的目录变成Python的命名空间,而目录中所包含的子目录和模块文件则 ...

  4. 第二十五篇:在SOUI中做事件分发处理

    不同的SOUI控件可以产生不同的事件.SOUI系统中提供了两种事件处理方式:事件订阅 + 事件处理映射表(参见第八篇:SOUI中控件事件的响应) 事件订阅由于直接将事件及事件处理函数连接,不存在事件分 ...

  5. Python之路(第二十五篇) 面向对象初级:反射、内置方法

    [TOC] 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它 ...

  6. Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块

    一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version . sys.maxint ...

  7. 第二十五篇 -- C++宝典中的图书管理系统

    此篇文章是基于C++宝典写的图书管理系统,本人对其中的部分做了相应修改,并且以现有格式替代原有格式,使程序更加清晰明了.此程序运行在VS2017上. 系统设计 图书管理系统分为四个模块:图书管理模块. ...

  8. flask第二十五篇——控制语句

    有兴趣的请加船长公众号:自动化测试实战 先和大家强调一个发邮件的问题 # coding: utf-8 import smtplib from email.mime.text import MIMETe ...

  9. 第二十五篇:使用 sigaction 函数实现可靠信号

    前言 在前文中,讲述了一个可靠信号的示例.它分成几个步骤组成( 请参考前文 ).在 Linux 系统编程中,有个方法可以将这些步骤给集成起来,让我们使用起来更加的方便. 那就是调用 sigaction ...

随机推荐

  1. C# 利用HttpWebRequest进行HTTPS的post请求的示例

    最近一个推送信息的目标接口从http格式换成https格式,原来的请求无法正常发送,所以修改了发送请求的方法.标红的代码是新加了,改了之后就可以正常访问(不检测证书的) public static s ...

  2. 【洛谷P1367】蚂蚁

    蚂蚁 [题目描述] 在一根无限长的木棍上,用n只蚂蚁,每只蚂蚁有一个初始位置和初始朝向,蚂蚁们以每秒一个单位的速度向前移动,当两只蚂蚁相遇时,它们会掉头(掉头时间忽略不计).现给出每只蚂蚁的初始位置和 ...

  3. python 并发编程之协程

    一.协程 协程: 单线程下的并发,又称 微线程.协程是一种用户态的的轻量级线程,即协程是由用户程序自己控制调度的. ​ 协程的本质就是在单线程下,由用户自己控制一个任务,遇到 io 阻塞就切换另外一个 ...

  4. 重置按钮_reset

    function formreset(form){ for(var i=0;i<frmMain.length;i++){ if(frmMain.item(i).type=="text& ...

  5. NEC 工程师规范

    工程师规范 - 开发准备 了解产品和设计 参加需求.交互.视觉会议,了解产品设计和项目成员. 了解产品面向的设备和平台. 了解产品对兼容性的要求以及是否采用响应式设计等. 了解产品要使用的技术(WEB ...

  6. JSONP--解决ajax跨域问题

    JSON和JSONP JSONP和JSON好像啊,他们之间有什么联系吗? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.对于JSON大家应该是很了解了吧 ...

  7. 使用poi读取excel文件 Cannot get a text value from a numeric cell

    我这样转换得到一个excel文本域的值 Cell cell = row.getCell(c); cell.setCellType(Cell.CELL_TYPE_STRING); String park ...

  8. HTTP基本内容

    *********************HTTP基本交互*************************** HTTP请求格式:HTTP 请求由三部分组成:请求行.请求头和请求正文请求行: 请求方 ...

  9. 新知识 HtMl 5

    快要毕业了,即将走向实习岗位,但是这日子过的太无聊了,昨天逃课回宿舍打开电脑想看电影但是没什么好看的,于是上床睡觉了,越躺越无聊,然后爬了起来到学习图书馆找了本HTML5的课本,学习了起来(我感觉ht ...

  10. 在一台Apache服务器上创建多个站点(不同域名)

    使用不同的域名来区分不同的网站,所有的域名解析都指向同一个 IP 地址.Apache通过在HTTP头中附带的 host参数来判断用户需要访问哪一个网站. 例如要在一台服务器上设置如下两个站点: htt ...