摘要 - Digest
首先从md5说起,一般新进入开发行业最先接触的就是md5了,
md5本质上是一个hash(谐音:哈希)算法,可以从一个大文件信息中提取出一小段信息,叫提取摘要,
有的地方也有提取指纹这种说法,其实指纹这个比喻很好,
md5(原始数据) = 摘要
hash算法的目的:同样的一段数据通过hash函数总是得到相同的摘要,不同的数据通过md5总是应该
得到不同的摘要
为什么需要摘要:
一个很常见的使用场景是在会员系统上,网站为了安全一般不会存储用户的登陆密码,
那为我们在登陆的时候网站怎么知道我们的密码是对的呢?答案就是hash,比如你在
注册的时候密码填写的 123456,系统将你的密码进行hash,最后的结果可能是
e10adc3949ba59abbe56e057f20f883e,会员系统就是存的这一串字符,当你下次
登陆的时候,你输入123456,系统还是用原来那套hash算法,得出一串字符,和系统之前存
的字符串对比,如果一样,说明密码正确。
hash算法目的那一行有一个关键词“应该”,hash的目的是理想化的,不管什么hash算法实际
上总有特别小的概率会出现不同的原始数据通过hash函数可能会得到相同的结果,
所以:越好的hash算法会将这个概率降到越低
这个概率越低,黑客要通过手段碰撞出相同摘要的难度就越大
常见的md5他的安全性其实不高,黑客很容易就可以利用彩虹表进行md5碰撞来生成相同的摘要,
所以现在市面上的系统在使用md5的时候通常会有加盐操作,
md5(原始数据+salt) = 摘要
因为混入了salt,安全性进一步得到提升
细心的读者可能发现了,我上面一直说的摘要和哈希,并没有提到加密,那么md5属不属于加密呢?
由md5+salt 继续延伸一下其实就是 HS256 (Hmac + Sha256)
sha256和md5的功能一样,但是比md5更加安全
HS256(原始数据,key) = 摘要
这里的key就和salt作用相同
同样的问题,HS256属于加密吗?
答案是: 否,上面的都不属于加密,而是摘要,或者说指纹
什么叫加密,一个数据通过一个算法加密,可以通过相反的算法解密,而摘要只能单方向的
的’加密‘,不能逆向解密,所以不属于加密,但是摘要在某些情况下确实有加密的效果,
而且摘要和加密通常紧密结合,比如要对一个大文件
进行加密,但是这些加密函数都不支持这么大的文件,怎么办?这个时候就需要用hash函数先提取摘要,在
对摘要进行加密来达到同样的效果
摘要 - Digest的更多相关文章
- MessageDigest消息摘要
<1>MessageDigest基础 MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法. MessageDigest 对象开始被初始化.该对象通 ...
- 消息摘要、哈希(hash)、加盐
hashlib 算法介绍: python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...
- jsp------实现MD5加密
index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UT ...
- Python3 内建模块 hashlib、itertools、HTMLParser、urllib
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制 ...
- WebApi接口开发
文档 规范的文档对接口的开发有着至关重要的作用,规范的文档能够使 双方对接口的定义以及接口的参数都有一个明确的概念,便于沟通和联调. 在接口的开发过程中,为了保证传递参数的传递的私密性,参数传输是需要 ...
- Python常用模块(time, datetime, random, os, sys, hashlib)
time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) : 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运 ...
- Deppon接口开发
一.1) 支持的传输协议 http ,暂时只支持HTTP协议进行通信. (2) 支持的数据传输格式 Json ,所有接口暂只支持json消息格式. (3) 编码格式:UTF-8 交互编码格 ...
- hashlib模块--摘要算法
算法介绍: Python的hashlib提供了常见的摘要算法:MD5,SHA()等. 摘要算法,又称哈希算法,散列算法.通过一个函数,吧任意长度的字符串转换为固定长度的字符串(16进制) 摘要算法就是 ...
- python基础-------模块与包(一)
模块与包 Python中的py文件我们拿来调用的为之模块:主要有内置模块(Python解释器自带),第三方模块(别的开发者开发的),自定义模块. 目前我们学习的是内置模块与第三方模块. 通过impor ...
随机推荐
- P1099 树网的核——模拟+树形结构
P1099 树网的核 无根树,在直径上找到一条长度不超过s的路径,使得最远的点距离这条路径的距离最短: 首先两遍dfs找到直径(第二次找的时候一定要吧father[]清零) 在找到的直径下枚举长度不超 ...
- 【cf比赛练习记录】Codeforces Round #579 (Div. 3)
思考之后再看题解,是与别人灵魂之间的沟通与碰撞 A. Circle of Students 题意 给出n个数,问它们向左或者向右是否都能成一个环.比如样例5是从1开始向左绕了一圈 [3, 2, 1, ...
- nRF52832 串口仅支持偶检验
通常在使用串口时,我们习惯是不进行奇偶检验(even/odd parity),让应用层的软件自己检验即可.如果非要硬件校验时,以下是关于NRF52832的奇偶检验配置: // 52832 仅支持 ev ...
- vim配置无插件
其实,vim插件会影响编辑器的启动速度,虽然有些插件影响不大,我依然觉得不够,其实通过简易的状态栏,可以显示必要的信息,能自定义颜色和背景甚至透明就足够了. 一.自定义状态栏其实以下内容可以写在一行上 ...
- clion ctrl+鼠标左键不能调到函数实现
问题:ctrl+鼠标左键只能在函数定义和申明之间跳转,不能跳转到implement,如果按ctrl+shift+B会报“no implement”. 解决:更改CMakeList文件,更改版本号. c ...
- go 指南学习笔记
1 If for 后面没有小括号.后面的花括号,要在当前行,并且中间有内容,右花括号要单独一行. 因为go会格式化代码,自动插入分号. 2 函数和方法的区别: 方法需要有一个接受者(select ...
- Use of Time-series Based Forecasting Technique for Balancing Load and Reducing Consumption of Energy in a Cloud Data Center
年份:2017 摘要: 由于工作负载分配不均,一些服务器变得过载,而另一些服务器仍处于欠载状态. 为了实现负载平衡,需要从过度使用的节点迁移一些虚拟机. 但是与此不同的是,本文提出了一种负载预测算法, ...
- 第07组 Beta冲刺(3/5)
队名:摇光 队长:杨明哲 组长博客:求戳 作业博客:求再戳 队长:杨明哲 过去两天完成了哪些任务 文字/口头描述:代码编辑器,目前没什么进展 展示GitHub当日代码/文档签入记录:(组内共用,已询问 ...
- mysql死锁(锁与事务)
线上某服务时不时报出如下异常(大约一天二十多次):“Deadlock found when trying to get lock;”. Oh, My God! 是死锁问题.尽管报错不多,对性能目前看来 ...
- winrunner 测试工具
WinRunner在项目中的作用 (winrunner测试设计:http://blog.chinaunix.net/uid/301743/year-2013-list-81.html?/178 ...