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

加密复杂程度: SHA1   <   SHA224    <   SHA256    <  SHA384   <   SHA512 <  MD5

加密越复杂,意味着消息的时间就越多。

哈希算法:把一个不定长的内容,加密变成一个定长的内容,而且与被加密内容是唯一对应的。

很常见的,我们在网银,淘宝,京东能都有账户密码,用户输入的时候都是明文,密码在传输的过程中,必须是密文,而不能是明文,同时数据库存的时候,必须存为可与明文唯一对应的加密后的值。

三个知识点:

1. 一个字符串可以转换成一段密文,并且不能被反解;

2. 既然不能反解,那只能正解,比如在登录的时候就让他们都变成密文,然后用两个密文进行比较

3. 原生写的MD5,全世界人都知道,所以可以进行加言,该加言只有开发者自己知道。对于需要加密的都是基于这个加言后的MD5进行的,别人也就无法反解了。

import hashlibobj = hashlib.md5()obj.update("hello".encode("utf-8"))
print(obj.hexdigest())   # 5d41402abc4b2a76b9719d911017c592

以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

import hashlibobj = hashlib.md5("jiayan".encode("utf"))obj.update("hello".encode("utf-8"))
print(obj.hexdigest())   # 686a12bb5577133d6698131cbf0b4b4a

需要注意的:

先对"A"进行加密,接着在对"B"进行加密,"B"的加密是基于"A"的加密的。相当于"B"的加密对象是"AB"

import hashlibobj = 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 hashlibobj = hashlib.md5("jiayan".encode("utf"))obj.update('world'.encode('utf8'))
print(obj.hexdigest())
# b278e99dfd536f7844785bbd39288e1a (没有"hello"时)
# c805eca8aad002e5d44a39d3aec78f8e  (有"hello"时)
与没有注释"hello"的结果不一致,证明是基于hello加密后再进行加密的。还可以通过下面的方法验证
import hashlibobj = hashlib.md5("jiayan".encode("utf"))obj.update('helloworld'.encode('utf8'))
print(obj.hexdigest())
# c805eca8aad002e5d44a39d3aec78f8e  ("helloworld"连在一起时)
# c805eca8aad002e5d44a39d3aec78f8e  (有"hello"时)

hashlib下还有SHA256等:

SHA256等其他加密算法的用法与MD5完全一样,只需要把MD5换成256等即可。

import hashlibobj = hashlib.sha256("jiayan".encode("utf-8"))
obj.update("hello".encode("utf-8"))
print(obj.hexdigest())
# 24ac0688c0d320346adc8cafd1ba543cf4332ed1e5fdd610edd5f7365b4a862f

转载于:https://www.cnblogs.com/victorm/p/9281498.html

第二十五篇 hashlib模块(* *)相关推荐

  1. Android UI开发第二十五篇——分享一篇自定义的 Action Bar

    Action Bar是android3.0以后才引入的,主要是替代3.0以前的menu和tittle bar.在3.0之前是不能使用Action Bar功能的.这里引入了自定义的Action Bar, ...

  2. 第二十六篇 request模块使用

    心得:requests模块还是比较好用的,运用起来简单,而且结合python,爬取网页数据,那简直分分钟的事情. requests请求一般分为两种请求方式: 1 get请求:一般用来请求数据,获取数据 ...

  3. STM32F429第二十五篇之MCU屏实验详解

    文章目录 前言 硬件 软件 结构体 SRAM_HandleTypeDef Instance(FMC寄存器地址) Extended(拓展寄存器地址) Init(初始化变量) Lock(锁) State( ...

  4. SpringBoot第二十五篇:2小时学会springboot

    一.什么是spring boot Takes an opinionated view of building production-ready Spring applications. Spring ...

  5. EXTJS学习系列提高篇:第二十五篇(转载)作者殷良胜,ext2.2打造全新功能grid系列--右键菜单篇...

    本文介绍如何在grid列表里 在某行上面单击右键弹出菜单的功能 先看看效果图: 如上图所示,具体菜单的功能没有去实现,这里和前几篇的后台都极为类似,有需要后台代码的朋友只需要浏览前几篇即可. 下面仅仅 ...

  6. Android之UiAutomator测试框架源码分析(第二十五篇:Gestures的设计与基本实现分析)

    (注意:本文基于UI Automator测试框架版本为2.2.0) Gestures类产生的对象,由UiObject2使用,UiObject2对象在创建时,持有一个Gestrues对象,我们这篇学习G ...

  7. 第二十五篇 -- 学习第三十四天打卡20190726

    学习书籍<剑桥商务英语中级词汇精选>乱序版 Day05 Day30proprietor [prə'praɪətə(r)] n.所有者,经营者例:The proprietor is resp ...

  8. JavaScript 设计模式学习第二十五篇-中介者模式

    中介者模式(Mediator Pattern)又称调停模式,使得各对象不用显式地相互引用,将对象与对象之间紧密的耦合关系变得松散,从而可以独立地改变他们.核心是多个对象之间复杂交互的封装. 根据最少知 ...

  9. “约见”面试官系列之常见面试题第二十五篇之对vue-router的理解(建议收藏)

    先整体展示下vue-router使用方式,请牢记一下几步哦! import Vue from 'vue' import VueRouter from 'vue-router' //注册插件 如果是在浏 ...

最新文章

  1. (0020)iOS 开发之-设计模式-懒加载解惑
  2. 如何使flexbox子代的父母高度为100%?
  3. java实现一个单例设计模式_Java正确实现一个单例设计模式的示例
  4. Oracle执行计划中 并行和BUFFER SORT的问题
  5. 关于MySQL相关的查看显示信息:
  6. 第三方登录接入-qq,weibo-java
  7. 重新设计Hamcrest
  8. 触发起名字使用正则_好名字一定在字音、字形、字意上比较吉利
  9. 如何使用分析模型 — 3. 排比图,分析问题的同时给出答案
  10. 《Windows Server 2012活动目录管理实践》 目录15-28章
  11. mysql 处理文件函数_mysql数据处理与函数
  12. 晚上运动对身体好吗?
  13. 电脑进不了系统怎么重装系统win11
  14. QT ListView 记录
  15. 【期末划重点】电路与电子技术基础
  16. 蓝桥杯web:2.【Bug 调试】修复注册验证问题
  17. 通过Makefile传参数到代码中
  18. Riverbed将SD-WAN融入WAN优化
  19. dy极速版-艳云脚本云控系统
  20. 会员管理系统实战开发教程(三)-充值记录功能

热门文章

  1. STM32中使用静态“字符串的方式”
  2. 【CyberSecurityLearning 70】DC系列之DC-1渗透测试(Drupal)
  3. 汇编中ah,al,ax;es,cs,ds,ss;
  4. Redis缓存穿透、击穿、雪崩、预热、更新、降级
  5. SpringBoot 嵌入式Servlet容器
  6. HashSet、TreeSet、TreeMap实现原理
  7. STM32开发 -- CRC校验码
  8. Deep Residual Learning for Image Recognition(ResNet)论文翻译及学习笔记
  9. Android NDK 内存泄露检测
  10. android settings源代码分析(2)