hashlib加密模块详解
1.hash是把任意长度的消息压缩到某一固定长度的数值的函数。
hash主要用于安全加密,把一些不同长度的信息转化成杂乱的128位编码里,叫做hash值。
hash就是把内容和内容地址之间找到一种映射关系,并不能够反推,从而达到加密。
2.MD5信息摘要算法,一种被广泛使用的密码杂凑函数。可以产生出一个128位的散列值,用于确保信息传输完整一致。
MD5功能:
输入任意长度的信息,通过MD5都会将其转化成一个128bit的信息(数字指纹)hash的是19个数字,152bit。MD5加密的是16个数字,128位。
不同的输入得到不同的结果。
>>> import hashlib
>>> dir(hashlib)
['__all__', '__builtin_constructor_cache', '__builtins__', '__cached__', '__doc__', '__file__', '__get_builtin_constructor', '__loader__', '__name__', '__package__', '__spec__', '_hashlib', 'algorithms_available', 'algorithms_guaranteed', 'blake2b', 'blake2s', 'md5', 'new', 'pbkdf2_hmac', 'sha1', 'sha224', 'sha256', 'sha384', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'sha512', 'shake_128', 'shake_256']
>>> m = hashlib.md5() # m是一个接收参数的对象。
>>> m.update(b'dapeng') # 接受的参数钱加b,表示以二进制方式读取。
>>> m.hexdigest() # 十六进制
'210ed3cf9a0ea07ae04e781fe424c087'
3.MD5算法特点
①﹐压缩性:任意长度信息算出MD5值的长度都是固定的,都是16位,128个字节。
②﹑容易计算。从原数据计算出MD5值很方便。
③ 抗修改性。对原数据进行1个字节的修改,MD5值都会发生很大的变化。
④ 强抗碰撞. 想找一个原数据的MD5值,几乎是不可能的,很难。
4.MD5算法的可逆性
MD5算法是不可逆的。因为在转化为MD5值的时候,原数据的部分信息是丢失的。
5.MD5的用途
文件在传输前会得到以恶搞MD5值,接收文件后得到的MD5值和传输前的比较,不一样则文件被修改过。
经常会看到一些文件提供下载会公布MD5值,就是因为如此,因为有的下载文件会被人传入病毒。
防止明文被看到
一些社交,需要支付的网站保存用户的密码,密码存放在数据库里,是以MD5值存放,工作人员看不到。
用户输入密码时会转化成MD5值,和数据库里的mD5值做比较,如果相等则验证成功。
既然MD5是不可逆的?网上存在的解密工具到底有什么意义?
输入一些简单的MD5值到网上的解密工具,真的能把你的信息显示出来,大吃一惊。
原来,网站的人员用一些程序24h在跑MD5值,并且创建了一个库,里面存放着MD5值和铭文相对应的关系。你输入MD5值,他会在库里找,并不是真的破解。
所以,密码得有多复杂就多复杂,很危险。简称撞库。
数字签名
需要第三方机构认证。比如一个人签订一份合同,第三方通过MD5算法生成一个MD5值。如果以后这个人反口否认合同是他写的,可以把合同新生成一个MD5值和以前的MD5值比较,相同则此人说谎,这就是数字签名。
hashlib加密模块详解的更多相关文章
- 一、Nginx配置文件详解
配置文件介绍 主要有两部分:分别是 main:主体部分 http{}:虚拟主机配置部分 配置指令主要以分号结尾:配置语法:directive value1 [value2 ....] 支持使用的变量 ...
- python常用模块详解
python常用模块详解 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用p ...
- 全网最详细的Sublime Text 3的安装Package Control插件管理包(图文详解)
不多说,直接上干货! 全网最详细的Windows里下载与安装Sublime Text *(图文详解) 全网最详细的Sublime Text 3的激活(图文详解) 全网最详细的Sublime Text ...
- 铁乐学python_shelve模块详解
python序列化模块-shelve模块详解 shelve:vt. 将(书等)放置在架子上:搁置,将某事放到一旁不予考虑:将-搁在一边:装搁架于: 个人感觉有点像字典缓存?暂时搁置到一旁的意思? 研究 ...
- python中常用模块详解二
log模块的讲解 Python 使用logging模块记录日志涉及四个主要类,使用官方文档中的概括最为合适: logger提供了应用程序可以直接使用的接口API: handler将(logger创建的 ...
- web框架详解之 tornado 四 模板引擎、session、验证码、xss
一.模板引擎 基本使用 继承,extends 页面整体布局用继承 导入,include 如果是小组件等重复的那么就用导入 下面是目录 首先在controllers里面创建一个文件,文件里面是页面类 # ...
- Sqlmap全参数详解
sqlmap全参数详解 sqlmap是在sql注入中非常常用的一款工具,由于其开源性,适合从个人到企业,从学习到实战,各领域各阶段的应用,我们还可以将它改造成我们自己独有的渗透利器.这款工具中,大大小 ...
- OpenStack的Heat组件详解
一:简介 一.什么Heat 1. Heat 是一套业务流程平台,旨在帮助用户更轻松地配置以 OpenStack 为基础的云体系.利用Heat应用程序,开发人员能够在程序中使用模板以实现资源的自 ...
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
随机推荐
- (深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)
bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域. bss是英文Block Started by Symbol的简称. bss段属于静态内存分配. ...
- POJ3268 Silver Cow Party —— 最短路
题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total ...
- dedecms时间格式调用标签汇总
1.时间格式{dede:field name='pubdate' function='strftime("%Y年%m月%d日 %H:%M:%S","@me")' ...
- @Data 注解在实体类的使用可省去生成GET,SET方法
你有没有觉得在每个实体类中都要生成get,set方法很麻烦, 要是需求的变化,需要再加一个字段,添加属性后则又要添加其get,set方法 现有一个很好用的注解能解决这个麻烦 1,idea中装上 lom ...
- Java中的Lock
同步机制是Java并发编程中最重要的机制之一,锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能防止多个线程同时访问共享资源(但是也有例外,比如读写锁).Java中可以使用synchroniz ...
- iOS--控制器加载自定义view的xib
我们在项目中,经常需要使用到自定义的view,而xib布局显得更为简洁,那么如何加载一个自定义的xib呢,网上的方法也很多很多,就是因为太多了,我经常会弄混,所以总结其中一个使用,如果以后使用到其他的 ...
- Android 增,删,改,查 通讯录中的联系人
一.权限 操作通讯录必须在AndroidManifest.xml中先添加2个权限, <uses-permission android:name="android.permission. ...
- golang defer使用——资源关闭时候多用
defer Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句.当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回.特别是当你在进行一些打开资源 ...
- UILabel 常见问题总结
写在前面:笔者在iOS软件开发中发现UILabel控件有些问题反复出现,所以在这里做点总结,方便自己查阅,也能给大家提供相关问题的解决方案. 一:当label里的内容显示满了的时候,能够自动将字体变小 ...
- JS 之正则表达式
字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界. -或- 对 ...