md5介绍

在写网络爬虫模拟登陆时,遇到提交表单时是一串数字和字母,才知道经过了md5加密。


md5加密的密码

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。

摘要算法的应用

任何允许用户登录的网站都会存储用户登录的用户名和口令。用户名和口令存到数据库表中。

name    | password
--------+----------
michael | 123456
bob     | abc999

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

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

username | password
---------+---------------------------------
michael  | e10adc3949ba59abbe56e057f20f883e
bob      | 878ef96e86145580c38c87f0410ad153

当用户登录时,首先计算用户输入的明文口令的MD5,然后和数据库存储的MD5对比,如果一致,说明口令输入正确,如果不一致,口令肯定错误。这样即使运维人员能访问数据库,也无法获知用户的明文口令。

hashlib介绍

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

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

在python3的标准库中,已经移除了md5模块,而关于hash加密算法都放在hashlib这个标准库中,如SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法等。

python3的hashlib官方文档(英文)

使用hashlib库进行md5加密

# 由于MD5模块在python3中被移除
# 在python3中使用hashlib模块进行md5操作import hashlib# 待加密信息
str = 'this is a md5 test.'# 创建md5对象
m = hashlib.md5()# Tips
# 此处必须encode
# 若写法为m.update(str)  报错为: Unicode-objects must be encoded before hashing
# 因为python3里默认的str是unicode
# 或者 b = bytes(str, encoding='utf-8'),作用相同,都是encode为bytes
b = str.encode(encoding='utf-8')
m.update(b)
str_md5 = m.hexdigest()print('MD5加密前为 :' + str)
print('MD5加密后为 :' + str_md5)# 另一种写法:b‘’前缀代表的就是bytes
str_md5 = hashlib.md5(b'this is a md5 test.').hexdigest()
print('MD5加密后为 :' + str_md5)

运行结果


英文加密,可以使用b' '前缀。

如果要对中文加密,使用b' '前缀来写会报错,原因在于字符转码问题,b' '在python中只能对ASCII字符进行转码。


要用encode(encoding='utf-8')将中文转码成UTF-8:

>>> import hashlib
>>> data = '你好'
>>> hashlib.md5(data.encode(encoding='UTF-8')).hexdigest()
'7eca689f0d3389d9dea66ae112e5cfd7'

其它中文编码md5加密

可以看到GBK、GB2312、GB18030编码的加密结果相同,而与UTF-8的加密结果不同。

>>> hashlib.md5('你好'.encode(encoding='UTF-8')).hexdigest()
'7eca689f0d3389d9dea66ae112e5cfd7'>>> hashlib.md5('你好'.encode(encoding='GBK')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'>>> hashlib.md5('你好'.encode(encoding='GB2312')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'>>> hashlib.md5('你好'.encode(encoding='GB18030')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'

关于每个方法的解析,可以参考:

CSDN:python3中的md5加密

关于python编码、encode、decode的内容,可以参考:

廖雪峰python教程:字符串和编码

CSDN:python中的encode()和decode()函数

CSDN:python3大作战之encode与decode讲解

参考链接

CSDN:Python之MD5加密

CSDN:python3中的md5加密

廖雪峰python教程:hashlib

Python3中的md5加密相关推荐

  1. python3 中的 md5 加密

    转载申明:https://blog.csdn.net/m0_38080253/article/details/78838489 在python3的标准库中,已经移除了md5,而关于hash加密算法都放 ...

  2. vue中使用MD5加密

    在vue中使用MD5加密  安装:  使用npm npm install --save blueimp-md5 <script src="http://cdn.bootcss.com/ ...

  3. java对密码进行加密的方法_如何在JAVA中使用MD5加密对密码进行加密

    如何在JAVA中使用MD5加密对密码进行加密 发布时间:2020-11-25 17:12:40 来源:亿速云 阅读:118 作者:Leah 本篇文章为大家展示了如何在JAVA中使用MD5加密对密码进行 ...

  4. java中的md5加密_java中的MD5加密

    java中的MD5加密 2016-01-22 09:07:00 admin 原创 1144 摘要:java中的MD5加密 /** * * md5加密 * @author LiuJiawan * @da ...

  5. vue中 使用md5加密

    安装 npm install js-md5 --save 组件内引入 需要的组件内引用 import md5 from 'js-md5'; 使用 let psd = '123123' md5(psd) ...

  6. java中md5加密和解密_如何在java中实现md5加密和解密

    如何在java中实现md5加密和解密 关注:273  答案:1  mip版 解决时间 2021-01-19 20:37 提问者精神疯裂 2021-01-19 05:36 如何在java中实现md5加密 ...

  7. ios android md5加密,iOS中使用MD5加密

    在iOS中使用MD5加密较简单,需要引入头文件CommonCrypto/CommonDigest.h,我们单独新建一个用于MD5加密的类Encryption,此类继承NSObject. Encrypt ...

  8. android php md5加密解密,Android中的md5加密怎么与php md5加密保持一致

    Android中的md5加密怎么与php md5加密保持一致 发布时间:2020-12-05 15:27:37 来源:亿速云 阅读:72 作者:Leah 这期内容当中小编将会给大家带来有关Androi ...

  9. java中完成md5加密解密_java实现md5加密解密 notNET中加密和解密的实现方法

    java实现md5加密解密 notNET中加密和解密的实现方法 亦或是旅途风光 7-14 1918℃ 22 [ ee21.cn - ASP.NET ] .NET将原来独立的API和SDK合并到一个框架 ...

  10. asp.net中的MD5加密

    其实在ASP.Net编程中,不用调用md5.asp来加密数据.在DotNet中有自带的类:System.Web.Security.HashPasswordForStoringInConfigFile( ...

最新文章

  1. PHP多图片上传 并检查 加水印 源码
  2. 今日 Paper | 社交媒体谣言检测;连续手语识别;细粒度服装相似性学习;混合图神经网络等
  3. ORACLE的索引和约束详解
  4. html固定右侧显示,html+css布局之--左边固定宽,右侧自适应(4种方法)
  5. 2020年奇安信校招JAVA岗笔试
  6. 八皇后问题求解动态图形演示
  7. 理科生浪漫起来,谁都顶不住!
  8. Oracle通过邀请Weaver和Chin推动JavaFX向前发展
  9. mysql windows身份验证_SQL Server 2005 怎么就不能用Windows身份验证方式登录呢?
  10. 数学建模 整数规划的基本原理和标准形式
  11. 数据管理流程,基础入门简介
  12. leetcode 462. Minimum Moves to Equal Array Elements II
  13. 深度剖析WinPcap之(二)——网络分析与嗅探的基础知识(4)
  14. 自然语言处理:简单解释
  15. qtp11安装及入门
  16. 在金融等重要行业的计算机系统中 通常采用,货币金融学题库
  17. Narrow daylight 歌词翻译
  18. python合并视频(mp4+mp3)
  19. android 计算屏幕尺寸来区分phone和pad
  20. 计算机组成原理一篇过

热门文章

  1. mysql数据对比_MySQL--如何快速对比数据
  2. usb网卡android驱动+win7,usb网卡万能驱动_手把手教你usb网卡驱动
  3. 全国地区 mysql表_2017全国省市区数据库-2017全国省市区数据库下载 官方版 - 河东下载站...
  4. 微型计算机原理与接口技术 试卷,微机原理与接口技术试卷和答案4套.doc
  5. 24lc08 c语言源码,24LC08,24LC08 pdf中文资料,24LC08引脚图,24LC08电路-Datasheet-电子工程世界...
  6. AvalonDock
  7. 2010年通信工程概预算培训讲义
  8. [导入]WAP开发教程
  9. 【安全资讯】引爆点:过去2020年勒索软件攻击激增62%
  10. RapidMiner Studio 自动模型