md5( Message Digest Algorithm ,消息摘要算法)学习

md5( Message Digest Algorithm ,消息摘要算法)

主要是通过特定的hash散列方法将文本信息转换成简短的信息摘要,压缩+加密+hash算法的结合体。

这里暂不写md5 的计算步骤,只对 md5 进行了解。

什么是 MD5

如果说是加密算法,但是 md5 的加密是不可逆。

准确说它是一种信息摘要算法,从一个字符串或一个文件中按照一定的规律生成一个特殊的字符串。(就是这个特殊的字符串称之为摘要,即从原来的文件中摘一些信息进行加工)

——
——

MD5 值的特点

加密后的数据有固定的长度
无论原始数据多长或多段,结果的 md5 值长度都是 128 bit,这 128 bit 是由 0 和 1 组成的一段二进制数据 。

加密后的数据有固定的限制
最终 128 bit 的数据会被打印成一个 32 位的字符串。通常所说的 md5 值就是指这 32 位的字符串。
这 32 位字符串一定是由 “09,af”组成的。
所以说,如果某个 md5 值不是 32 位,或者其中的字符含由“ 0~ 9,a~f ”之外的,那这肯定是一个错误的 md5 值。

加密后数据的确定性
一个原始数据的 md5 值是唯一的,同一个数据不可能计算出多个不同的 md5 值。
把文件进行传输,并且传输前有其 md5 值,成熟后再次计算出文件的 md5 值,与前面拥有的 md5值进行对比,就可以检测文件在传输过程中是否被更改。

加密后数据的碰撞
即不同的原始数据是可能计算出相同的 md5 值,不过概率很小。
网上有很多相等 md5 值的原始数据总结。

加密后数据的不可逆性
如果给出一个 md5 值,是无法通过这个 md5 值还原出原始数据的。

——
——

ctf 中的 md5 绕过

0e绕过
在 php 弱类型比较中,如果字符串的 md5 值都是 0e 开头,则判断为相等。
一些 md5 值是 0e 开头的字符串:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a

数组绕过
md5是无法处理数组的。
如给出代码:
var_dump(md5( G E T [ ′ a ′ ] ) = = m d 5 ( _GET['a'] )== md5( GET[a])==md5(_GET[‘b’]))
需要进行 get 传参,并且要符合条件。则可以传入:
?a[]=a&b[]=b
最后源代码会判定为 null==null ,达到绕过。

md5 碰撞绕过(强类型绕过)
如代码:

if((string)$_POST['a']!==(string)$_POST['b'] && md5($_POST['a'])===md5($_POST['b']))

这里要求构造 a 和 b 不同,但是他们的 md5 值要相同。
所以需要进行 POST 请求传入两个 md5 值相同的不同字符串。
传入:

a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
———
&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

举出几个 ctf 中运用 md5 绕过的例子:
在这里插入图片描述
这里是使用了 md5 无法处理数组的特点。
还有用 md5 碰撞绕过的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Goodric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值