你怕是对MD5算法有误解

news/2024/7/12 3:01:41 标签: https, 数据可视化, 密码学, 区块链, jwt

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

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

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

https://img-blog.csdnimg.cn/img_convert/ef4ffeb4815d227103b66b7339d1d862.png" />

伸手党先看答案:

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

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

加密算法

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

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

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

https://img-blog.csdnimg.cn/img_convert/0589d5bb7dd9907cfb596e3afa4314da.png" title="null" />

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

https://img-blog.csdnimg.cn/img_convert/ffdfe2ad76e577266e44fcfe43cd014e.png" title="null" />

摘要算法

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

https://img-blog.csdnimg.cn/img_convert/f762c0e291326368e15fc490c29c4f48.png" title="null" />

摘要算法之所以能指出数据是否被篡改,就是因为摘要函数是一个单向函数,计算很容易,但通过摘要(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,算是密钥+哈希算法结合的一个应用场景, 具备快速、自签名的特点。

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

# 更多精彩

  • 面试八股文:你写过自定义任务调度器吗?

  • 看过这么多爆文,依旧走不好异步编程这条路?

  • 你管这叫"线程安全"?

  • String是一个奇怪的引用类型

  • 全网最通透的“闭包”认知 · 跨越语言

  • 鹅厂二面,Nginx回忆录

  • 实话实说:只会.NET,会让我们一直处于鄙视链、食物链的下游

  • 什么是云原生?

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

https://img-blog.csdnimg.cn/img_convert/47efc017a93ab7d94d1c3889943fb68f.gif" />


http://www.niftyadmin.cn/n/1864499.html

相关文章

Redis分布式锁抽丝剥茧

之前码甲哥写了两篇有关线程安全的文章:•你管这叫线程安全?•.NET八股文:线程同步技术解读分布式锁是"线程同步"的延续最近首度应用"分布式锁",现在想想,分布式锁不是孤立的技能点,这…

.net 基础知识 ——条件语句

If 语句C#VBint i 3; if (i < 5) { Console.WriteLine("i 小于 5"); }Dim i As Integer 3 If i < 5 Then Console.WriteLine("i 小于 5") End Ifint i 9; if (!(i < 5)) { Console.WriteLine("i 大于等于 5"); }Dim i A…

使用 StateServer 保存 Session

StateServer 模式的实质是&#xff0c;把Session 存放在一个单独的进程里&#xff0c;此进程独立于 aspnet_wp.exe 或 w3wp.exe 。启用此服务后&#xff0c;在“任务管理器”中可以看到一个名为 aspnet_state.exe 的进程&#xff0c;下面开始说明一下设置的具体步骤&#xff1a…

ado.net连sql2005的问题

connection close掉之后&#xff0c;在sql2005里并不消失而是处于睡眠状态。 用loadrunner跑压力测试&#xff0c;发觉5个人&#xff0c;10个人&#xff0c;都正常&#xff0c;但20个人就不正常了。而且一到20个人之后连sql2005都连不进去了。在性能里监视sql2005的连接数和cpu…

未能创建Visual c# 2008编译器

一上班就遇到这个错误&#xff0c;害我忙活了大半天 这里记了两条命令&#xff0c;可以修复 devenv /resetsettings devenv /resetskippkgs 如果修复不了&#xff0c;卸载重装在修复&#xff0c;我是这样修复好的&#xff0c;重装的时候最好完全卸载转载于:https://www.cnblogs…

如何激励你的员工?

谈到激励&#xff0c;就不得不提一个经典的故事 -- 《兔王遇到的难题》。 1.兔王遇到的难题 南山坡住着一群兔子。在蓝眼睛兔王的精心管理下&#xff0c;兔子们过得丰衣足食&#xff0c;其乐也融融。可是最近一段时间&#xff0c;外出寻找食物的兔子带回来的食物越来越少。为什…

去除Word安装PowerDesigner12后的Requirements工具条

powerdesigner安装后&#xff1a; C:\Program Files\Sybase\PowerDesigner 12\Add-ins\Microsoft Word Import Export 下的 WordToRqm.dot自动加载到word Normal.dot中&#xff0c;搞得word运行缓慢&#xff0c;十分不爽&#xff0c;尤其是做切换对话框和选择文本时&#xff0c…

ejb3的web service

改造原来的ejb3项目为web service 1.修改会话bean如下&#xff1a; package com.persia.ejb;import javax.ejb.Stateless; import javax.jws.WebMethod; import javax.jws.WebService;Stateless WebService public class UserManagerBean implements UserManager {WebMethodpub…