你怕是对MD5算法有误解

大家常听到“MD5加密”、“对称加密”、“非对称加密”,那么MD5属于哪种加密算法?
面试官问这样的问题,准是在给你挖坑。

"MD5加密"纯属口嗨,MD5不是加密算法,是摘要算法。

今天小码甲带大家梳理加密算法、摘要算法的定义和场景:

伸手党先看答案:

加密算法的目的,在于使别人无法成功查看加密的数据,并且在需要的时候还可以对数据进行解密来重新查看数据。

而MD5算法是一种哈希算法,哈希算法的设计目的本身就决定了,它在大多数情况下都是不可逆的,即你通过哈希算法得到的数据,无法经过任何算法还原回去。所以既然不能将数据还原,也就不能称之为解密;既然不能解密,那么哈希的过程自然也就不能称作是[加密]了。

加密算法

加密:是以某种特殊的算法改变原有的信息,使得未授权的用户即使获得已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。

解密:加密的逆过程为解密,即将该加密信息转化为其原来信息的过程。

加密算法分为对称加密和非对称加密,其中对称加密算法的加解密密钥相同,非对称加解密的密钥不同。

HTTPS就同时用到非对称加密和对称加密,在连接建立阶段,使用非对称加解密(保护密钥不被查看), 在通信阶段使用对称密钥加解密数据。

摘要算法

摘要算法,又称哈希算法、散列算法。通过一个函数,将任意长度的内容转换为一个固定长度的数据串。

摘要算法之所以能指出数据是否被篡改,就是因为摘要函数是一个单向函数,计算很容易,但通过摘要(digest) 反推data却非常困难,而且,对于原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

使用迅雷下载某片的时候,下载站会顺带给你一个MD5校验码;
你找一个MD5校验工具,对下载下来的文件执行MD5算法,将得到的哈希值与下载站附带的MD5值对比,如果值是相同的,说明从该网站下载的文件没有损坏。

HMAC

延伸聊一个结合了密钥和哈希功能的请求认证方案:
HMAC ( hash-based message authenticated code)

很多第三方平台都采用这种授权认证方案,你回想一下,api平台是不是经常给你一对AppID Serect Key

1.Client & Server 都知晓一个私钥serect key2.客户端每次请求时,会针对(请求数据+ secret key)生成一个hash值
HMAC = hashFunc(secret key + message)3.客户端将哈希值做为请求的一部分,一起发送4.当服务端收到请求, 对( 收到的请求+ 查到的Serectkey')生成哈希,将计算的哈希值与请求中附带的原哈希值对比,如果相同,则认定请求来自受信Client,且请求未被篡改。

为什么会有这样的效果?

首先:Client 和Server的哈希值相同,根据哈希算法的设计初衷,说明请求过程未被篡改;

另一方面也反推 Client 和Server使用的是同一个Serect Key , 而Serect Key是私密信息,故此处的Client发送请求不可抵赖。

还可以考虑在客户端生成哈希时加入timestamp时间戳(请求也要附带这个时间戳),服务端收到后,先对比服务器时间戳与请求时间戳,限制15s内为有效请求,服务端再对(请求消息+ serect key+ timestamp)生成哈希,对比哈希,避免重放攻击

总结

本文给出的示例:HTTPS、迅雷MD5校验,足够帮助你了解加密算法和摘要算法的设计目的。

•加密算法的目的是:防止信息被偷看•摘要算法的目的是:防止信息被篡改

以后使用时候也能有的放矢,面试时也不会闹出笑话。

最后给出的WebAPI授权方案HMAC,算是密钥+哈希算法结合的一个应用场景, 具备快速、自签名的特点。

本号内容极其硬核,阅读和关注不是目的,更希望得到的是阅读反馈,互相促进认知的提升(相当真诚☺️)

今天因为你的点赞,让我元气满满!

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

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

相关文章

还在集什么五福,史上最惨锦鲤再次来袭!奖品堪比5年高考3年模拟!

全世界只有3.14 % 的人关注了数据与算法之美在锦鲤盛行的2018年我们超级数学建模也跟风来了一个“史上最惨锦鲤”活动为什么叫史上最惨锦鲤呢因为平常看一本数学书就已经头疼了何况我们奖品还是100本数学书试问除了学霸还有谁能承受这种殊荣巧的是最后的得主还真是一个学霸那就…

Python: logging日志模块简单示例

2019独角兽企业重金招聘Python工程师标准>>> Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST&#x…

开源基金会为何辟谣 鸿蒙背后有何玄机

最近,鸿蒙OS曝光率极高,受网络舆论热捧。铁流原本是不太愿意碰这个雷的,因网友提问,所以谈一谈这个事情。OpenHarmony和Harmony是两回事6月2日,公司官宣鸿蒙OS,给出了百台机型的升级计划,而且还…

java get image获取根路径_Java 获取资源文件路径

1 问题描述通过源码运行时,一般使用如下方式读取资源文件:String str "1.jpg";资源文件与源码文件放在同一目录下,或者拥有同一父级目录:String str "a/b/1.jpg";这样直接编译运行没有问题,但是…

阿里云开源的Blink,计算能力很疯狂:一眨眼,全部都算好!

全世界只有3.14 % 的人关注了数据与算法之美前两天,阿里云宣布开源“计算王牌”——实时计算平台Blink,回馈给ApacheFlink社区。官方称,计算延迟已经降到毫秒级:浏览网页的时候,你只是眨了一下眼睛,但在淘宝…

NET问答: 如何用 C# 计算相对时间 ?

咨询区 Jeff Atwood:给定一个 DataTime 值,如何计算如下时间?比如说:2 小时前?3 天前?1 个月前?回答区 neuracnu:我在 DateTime 类上做了一个扩展方法,你可以给它传递未来…

有趣程序和让人捧腹大笑的注释,你的注释还不够骚

全世界只有3.14 % 的人关注了数据与算法之美一&#xff0c;这个是关于数组的操作&#xff0c;数据汪也是才知道&#xff0c;居然还有这种操作# include <stdio.h>int main(){ int num[] {1,2,3,4};printf("the 3[num] result is : %d\n", 2[num]);return 0;}结…

.NET之盛派微信SDK简单操作

开篇语在6月5号&#xff0c;我报名去参加了微软举办的一个线下分享的技术市集&#xff0c;分享人是苏老师和赵老师(非常感谢)&#xff0c;其中苏老师讲述了关于一些容器的部署等操作(也可以观看我的历史文章)&#xff0c;其中关于部署的示例代码是使用盛派微信SDK做了一个对接微…

预售┃连锁反应装置积木好玩到尖叫!

▲数据汪特别推荐点击上图进入玩酷屋之前推荐的“小小机械师”成了孩子最受欢迎的玩具&#xff0c;玩了的孩子几乎没有不喜欢的。还有家长买多套送给朋友的孩子作为生日礼物。有家长来问&#xff0c;还有没有这种类型的新产品。和厂家咨询后&#xff0c;小木找到了一款“小小机…

VMware VSphere 虚拟化云计算学习配置笔记(四)

2:接下来配置安装vcenter-db&#xff0c;安装MS SQL 2008r2 在vcenter-db服务器上安装配置MS SQL 2008r2过程截图&#xff1a; 这里可能会要耐心等一下才会出现一下提示&#xff1a; 选择左边installation 之后出现右边第一项新的安装&#xff1a; 转载于:https://blog.51cto.c…

IT人回家过年的尴尬

全世界只有3.14 % 的人关注了数据与算法之美春节将至&#xff0c;有很多人已经踏上了返乡的旅途&#xff0c;回家开开心心过春节&#xff0c;归心似箭的心表明了他们对家乡的热爱&#xff0c;归心似箭的心显示了他们想念父母的情&#xff0c;归心似箭的心代表了他们对朋友的思。…

java 判断进程状态_获取远程服务器上 Java 进程的运行状态

为了安全考虑, 有些服务器会被限制登录. 本文介绍如何获取远程服务器上 Java 进程的运行状态.启动 jstatd 服务在服务器端启动 jstatd 服务后, 远程的机器可以通过 rmi 协议获取服务器上 Java 程序的运行状态.在服务器上创建 jstatd 的授权文件, 假设文件路径为/etc/jstatd.all…

聊一聊Elasticsearch和MySQL的常用操作

前言 ElasticSearch&#xff0c;开源的搜索和数据分析引擎&#xff0c;也是名列前茅的 nosql。很多时候会想拿它和关系型数据库做对比&#xff0c;严格上它们是没有太多可比性的。不过把有的东西放在一起比较&#xff0c;会帮助我们快速去理解一些 ElasticSearch 的内容。老黄这…

入门Python,限时1元!

爆竹声中一岁除&#xff0c;春风送暖入屠苏。猪年来袭&#xff0c;小天先跟各位模粉拜年啦&#xff01;当然&#xff0c;小天还准备了限时福利送给大家~套路&#xff1f;不存在的&#xff01;限时9元1深度学习限时体验第一章 深度学习概述与计算机视觉挑战1.1深度学习概述1.2 挑…

使用 Bridge to Kubernetes 简化云端开发

当我们面对一个大型应用程序&#xff0c;它有大量的微服务&#xff0c;并希望完成一些功能开发&#xff1f;我们面临许多挑战&#xff0c;其中之一将是处理正确的环境&#xff0c;如何进行开发。我们知道&#xff0c;在团队中解决这个问题的最佳方法是将其容器化并在云上托管。…

菜鸟学习数据科学家 5 大误区

全世界只有3.14 % 的人关注了数据与算法之美你准备好要成为一名数据科学家&#xff0c;积极的参加Kaggle比赛和Coursera的讲座。虽然这一切都准备好了&#xff0c;但是一名数据科学家的实际工作与你所期望的却是大相径庭的。本文研究了作为数据科学家新手的5个常见错误。这是由…

java多线程 sycophantic_Java多线程volatile和synchronized总结

volatile是轻量级的synchronized&#xff0c;在多处理器(多线程)开发中保证了共享变量的“可见性”。可见性表示当一个线程修改了一个共享变量时&#xff0c;另外一个线程能读到这个修改的值。正确的使用volatile&#xff0c;能比synchronized的使用和执行成本更低&#xff0c;…

春节特惠活动┃不只是舒适,简直是享受,Google公司用的腰靠,到底有什么秘密?...

▲数据汪特别推荐点击上图进入玩酷屋之前小木推荐“德国MINICUTE人体工学腰垫”受到了大家一致的好评和争相购买。小木为什么推荐这一款原因是&#xff1a;据统计&#xff0c;我国腰椎病患者已经突破2亿人。30~40岁人群中&#xff0c;患有颈腰椎病的占比59.1%&#xff01;而且有…

春节特惠活动┃给孩子讲100个科学道理,不如带他做这些趣味实验!

▲数据汪特别推荐点击上图进入玩酷屋玩具和学习看似是两个对立的东西&#xff0c;孩子天性爱玩&#xff0c;家长却希望孩子能多学习。不一定非要啃课本才能汲取知识&#xff0c;有时候&#xff0c;在轻松有趣的游戏中也能学到课堂上学不到的知识。让学习变得有趣、高效——给孩…

linux java 进程监控工具_推荐4个好用的Linux监控工具

本文介绍了作者常用的 4 个 Linux 监控工具&#xff0c;希望可以帮助读者提高生产力。身为一个运维开发人员&#xff0c;如果你不知道眼下当前服务器底层操作系统中正在发生什么&#xff0c;那就有点合眼摸象了。其实&#xff0c;你可以根据相应数据做出一定的推测&#xff0c;…