【Python】hashlib模块实现MD5加密

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

MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆。所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,通过比在表中比破解密码的MD5算法散列值,通过匹配从映射表中找出破解密码所对应的原始明文。

MD5算法具有以下特点:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。

MD5算法使用的特性:

方便存储:MD5加密出来都是32位的字符串,能够给定固定大小的空间存储,传输,验证
文件加密:MD5算法运用在文件加密上很有优势,应为只需要32为字符串就能对一个巨大的文件进行验证完整性
不 可 逆:MD5加密出来只会截取末尾32位,具有良好的安全性,如果是对于参数加密很难伪造MD5
加密损耗低:MD5算法加密对于性能的消耗微乎其微(速度快)

MD5算法的实际应用

1.密码验证
可以当做密码验证,为了保证密码不在cmd5网站上破译,最好加盐及乱序,也可以只取一部分md5加密后的内容。md5是不可逆算法,只要保证算法不变,就能和数据库中的md5相匹配。
邮箱密码验证过程:首先用户创建邮箱时,邮件系统会对密码进行md5加密后存储到数据库,这个时候在数据库里面看到的密码是加密的,保证密码只能用户自己知道,减少密码泄漏的风险。
等到你登陆邮箱时,系统不是检验用户的密码,而是检验用户输入的密码经md5加密以后和数据库内加密密码进行对比,判断是否相等。

2.请求参数校验
对于服务器来来说,除了系统问题最大的问题就是害怕请求被拦截,拦截后修改参数后就会出现很多漏洞的可能性。
为了避免被拦截、参数被修改,常用方法就是对请求参数进行校验,就算拦截了请求参数并修改它,只要模拟不出MD5加密出来的值,服务器过滤器直接就会进行拦截。
校验过程:客户端通过http或者https请求服务器时,对其中的参数按约定的MD5加密方法生成一个token,服务器接收信息后按照同样的MD5加密方法生成一个值,然后对比客户端传过来的token进行对比,一致说明请求参数没有被修改。

3.版权验证
当一个视频或者音频创作出来的时候它的md5是唯一的,若以后有翻录等版本出来,即使画质,声音,文件名都一样,但是他们的md5验证是不一样的,所以可以验证版权。
还比如用某一账户下载的视频它的账户信息也会和视频一起md5操作,如果以后这个人私自传播通过md5就可以去数据库中查找泄露版权的情况。

4.文件上传
文件上传时会上传文件的信息,此时将文件的md5上传,服务器中存储这个md5值,并存储这个md5值所对应的已上传字节长度,比如未上传对应为0,已上传对应为-1,已上传200字节就对应200,这个上传的时候可以匹配到这个文件在服务器中的状态,方便做断点续传,只要源文件没有更改,即使换个名字,换个账户都可以在服务器找到对应的文件,所以当服务器中有已经上传完毕的此文件时,别人再上传这个文件就可以实现秒传。

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
在python3的标准库中,已经移除了md5模块,而关于hash加密算法都放在hashlib这个标准库中,如SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法等。
具体代码实现:

import hashlib
import timeencode = 'utf-8'                        # 编码
appkey = 'md5test.'                     # 待加密信息time_span = str(int(time.time()))
o_token = appkey                            # 可以对o_token进行处理appkey+time_span
hl = hashlib.md5()                          # 创建md5对象
hl.update(o_token.encode(encoding=encode))  # 转换为bytes
token = hl.hexdigest().upper()              # hexdigest() 加密过程
print('第一种MD5加密后为 :' + token)# 另一种写法:b前缀代表的就是bytes
str_md5 = hashlib.md5(b'md5test.').hexdigest().upper()
print('第二种MD5加密后为 :' + str_md5)

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

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

相关文章

计算机编码发展历史和编码方式

编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码简称编码。 用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。 编码在电子计算机、电视、遥控和通讯等方面广泛使用。 解码&#x…

Jmeter+ForEach控制器+BeanShell取样器+BeanShell PostProcessor爬取网站信息储存csv

1、正则提取器ForEach控制器BeanShell PostProcessorBeanShell 取样器,爬取网站信息并写入到csv中 2、访问网站设置 3、正则提取设置,匹配数字-1代表提取所有符合条件的信息 4、ForEach控制器设置迭代每次提取出来的信息 5、BeanShell PostProcessor设置…

【Python】python3编码方式encode介绍

上一篇文章介绍了计算机编码发展历史和编码方式,现在我们聚焦到python语言中,在最新的Python3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言。例如: print(我喜欢 computer.encode(u…

telnet用法 测试端口号是否可以使用

方法 1 首先打开控制面板 2 点击程序 3 点击程序与功能 4 点击左边启用或关闭windows功能 5 在telnet客户端打上勾 点击确定 6 winr打开运行 输入cmd 7 打开后输入telnet ip 端口号 如果出来其他窗口则说明这个端口可用。若出现超时,说明这个端口不可用 前提…

阿里云 Ubuntu上的mysql运行sql文件来创建表

1、上传sql文件到指定目录 2、登录数据库 mysql -u root -p 3、查看数据库 show databases; 4、创建数据库 create database wlh; 5、对新创建的数据库操作 use wlh; 6、导入sql文件 7、查看数据库中表格 若有你数据库中的表格则导入成功 8、退出数据库操作 或者用quit; …

linux Ubuntu安装ftp并将本地文件上传到云服务器

确认是否已经安装ftp pgrep vsftpd无结果如下图: 2、执行安装 3、查看ftp是否安装成功 systemctl status vsftpd.service 4、 (1)新建"/home/uftp"目录作为用户主目录 打开"终端窗口",输入"sudo mkd…

【Python】PyCryptodome模块中5种AES加密模式介绍

分组密码有五种工作体制: 1.电码本模式(Electronic Codebook Book (ECB)); 2.密码分组链接模式(Cipher Block Chaining (CBC)); 3.计算器模式(Counter (CTR))&#xff1b…

阿里云root密码修改

一、root密码修改阿里云linux服务器修改root密码流程: 通过Xshell客户端输入账号root,输入密码,登陆到linux。 输入修改密码的命令 passwd 根据提示输入新密码,输入新密码的时候,软件不会显示*号,输入后…

【Android】Windows环境安装Android Studio教程

Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。 在IDEA的基础上,Android Studio提供: 基于Gradle的构建支持 Android…

【Android】Android Studio打包生成正式签名的APK

Android Studio是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA。它类似于Eclipse ADT,Android Studio 提供了集成的Android开发工具用于开发和调试。 那么今天我们就来讲讲如何通过Android Studio打包APK文件,相信有很多人还不是非常了…

【Android】Android Studio中新创建的app目录结构

安装Android Studio后,然后创建一个app项目。对于初学者来说,我们希望了解app目录结构,然后更好的进行开发工作。 但是要想了解一个app的目录结构,首先需要明确两个概念 Project Name:工程项目名称 Application Name:当前app发布…

mysql添加用户权限报1064 - You have an error in your SQL syntax问题解决

mysql添加用户及权限报错: 出现这样错的原因有两个: 1、语法有问题 (这里没有问题) 2、mysql版本是否支持 此种写法 找到一位大神说:你检查下mysql版本是mysql server 8.不支持同时创建用户和授予权限&#xf…

djangohttp://127.0.0.1:8000/media/test.jpg直接显示图片media配置

文件目录如下: 1、在settings中加入: STATIC_URL /static/ STATICFILES_DIRS (os.path.join(BASE_DIR,static),) #MEDIA_DIR (主要用于获取路径) MEDIA_DIR os.path.join(BASE_DIR,media) # 需要加入的MEDIA_DIR路径变量 #ME…

【Python】pandas模块中更改Series的数据类型

今天我们主要解决以下实际问题:一份黑名单数据存储在excel中,由于数据量庞大,现需要通过pandas找到某一列的重复数据,处理后再存入到excel中。 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的,主…

ubuntu Django项目后台不挂断运行之screen命令

1、安装screen apt install screen 2、新建一个screen screen -S web这样就会新开一个窗口。cd到你需要的目录然后输入你想输入的命令。输入: python manage.py runserver 0.0.0.0:80 3、重新开一个窗口,列出所有screen进程 screen -ls4、如果之前的s…

【Python】Paramiko模块在Windows10中import ssl报错的处理方法

上一篇文章【Python】Paramiko模块实现Linux服务器远程文件操作 介绍了如何通过Paramiko进行 sftp的操作,但最近遇到一个问题,换上家里的windows10电脑后,执行脚本时发现报错:\lib\site-packages\cryptography\hazmat\bindings\op…

【Jmeter篇】Linux环境下安装部署运行Jmeter

JDK安装和配置 1、使用yum线上安装jdk1.8 yum -y list java* #浏览线上所有jdk版本列表 yum -y list java-1.8*#浏览线上jdk1.7版本列表 yum -y install java-1.8.0-openjdk* #下载安装jdk1.8套件 java -version #检查是否安装成功 2、配置全局环境变量 which java ls -…

【Python实战】使用python批量生成发票

一般的贸易或者货运型公司,经常需要做发票,有时候我们会遇到需要做大批量重复性的发票时,如果人工一个个去做,即耗时而且容易出错,这时我们可以用的python和excel相关的模块去批量生成。 现在有这样一个场景&#xff…

【PS】如何将截图获取的印章迁移到新图片上

有时候我们需要特殊签名或者合同印章时,可以通过其他图片上截图后,经过处理后放置到新的图片上,这个时候我们可以通过ps进行处理,主要三个流程: 1.截取需要的签名或印章,用ps消除多余的信息; 2…

【Jmeter篇】Jmeter分布式调度压测部署

Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力,j…