首页 > 其他分享 >MD5哈希长度延展攻击

MD5哈希长度延展攻击

时间:2024-04-13 09:00:26浏览次数:27  
标签:攻击 延展 哈希 长度 原始数据 hashpump MD5

1. 哈希长度延展攻击的机制

哈希长度延展攻击利用的是哈希函数如MD5和SHA-1的特性。当计算哈希时,如果攻击者知道原始数据的哈希值但不知道原始数据内容,他们仍然可以在原始数据后添加一些数据,并且能计算出新数据串的哈希值,而不需要知道原始数据是什么。

对于MD5哈希函数,攻击者利用的关键是这种函数使用内部状态,这个状态在处理完所有数据后就是最终的哈希输出。如果攻击者知道一个哈希值(即内部状态),他们可以“接上”新的数据,仿佛这些新数据是紧跟在原始数据之后的。

2. 使用工具或脚本进行攻击

要进行长度延展攻击,我们可以使用像hashpump这样的工具。hashpump接受一个已知的哈希值、已知数据、附加数据和已知数据的长度,然后输出新的哈希值和附加后的完整数据。

例如,假设我们有以下信息:

  • 命令cmd=viewfile的哈希值h
  • 原始数据长度(注意这通常指密钥加原始数据的总长度)
  • 想要添加的命令rm

使用hashpump的命令行可能是这样的:

hashpump -s [原始哈希h] --data "viewfile" --signature [h] --append "rm" --keylen [密钥长度]

这将输出一个新的哈希值和构造的完整命令,即cmd=viewfile||padding||rm

3. 攻击方法、工具和结果说明

  • 攻击方法:使用了MD5哈希长度延展攻击,通过hashpump工具来生成附加了删除文件命令的新哈希值。
  • 工具说明hashpump是一个广泛使用的工具,专门用于生成哈希长度延展攻击所需的数据。它输出修改后的数据和对应的新哈希值。
  • 构造的命令和新的签名:这将依赖于hashpump提供的具体输出,包括新的命令串和相应的哈希值。

通过这种方式,即使不知道密钥k,也可以创建一个有效的命令来删除文件。

标签:攻击,延展,哈希,长度,原始数据,hashpump,MD5
From: https://www.cnblogs.com/liyishi1110/p/18132491

相关文章

  • 深入理解MD5算法:原理、应用与安全
    第一章:引言导言在当今数字化时代,数据安全和完整性变得至关重要。消息摘要算法是一种用于验证数据完整性和安全性的重要工具。在众多消息摘要算法中,MD5(MessageDigestAlgorithm5)因其快速、广泛应用和相对较高的安全性而备受关注。本书将深入探讨MD5算法的原理、应用和安全性,帮......
  • 漫谈:编码、哈希、摘要、加密都是什么(别再问“用base64加密行不行”了,会被鄙视)
    初级代码游戏的专栏介绍与文章目录-CSDN博客我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。    刚接触加密领域的新手经常搞不清楚这几个概念,这里给大......
  • 哈希(散列)查找
    1.哈希表(HashTable)(1)哈希表定义又称散列表,是一种数据结构,数据元素的关键字与其存储地址直接相关(2)同义词若不同的关键字通过散列函数映射到同一个值,则称为“同义词”(3)冲突通过散列函数确定的位置已经存放了其他元素,则称这种情况为“冲突”(4)填装因子装填因子=表中记录......
  • 代码随想录 day6 哈希表
    题目:P242有效的字母异位数,P349两个数组的交集,P202快乐数,P1两数之和收获:1.使用数组,集合(set,主要是unorder_set,无序,无重复)做哈希表。哈希表一般用来快速判断一个元素是否出现在集合里。2.unorder_set的用法。classSolution{public:vector<int>intersection(vector<......
  • 哈希表自记录
    存储结构:1.开放寻址法#include<cstring>#include<iostream>usingnamespacestd;constintN=2000003,null=0x3f3f3f3f;inth[N];intn;intfind(intx){intk=(x%N+N)%N;//蹲坑法while(h[k]!=null&&h[k]!=x){k++;......
  • 字符串哈希板子
    #include<iostream>#include<cstring>#defineMAX_SIZE100usingnamespacestd;classStringHash{public:intsize;char*array;char*array_forward;unsignedlonglong*pre_base;unsignedlonglong*hash_array;uns......
  • 如何在 Node.js 中使用 bcrypt 对密码进行哈希处理
    在网页开发领域中,安全性至关重要,特别是涉及到用户凭据如密码时。在网页开发中至关重要的一个安全程序是密码哈希处理。密码哈希处理确保明文密码在数据库受到攻击时也难以被攻击者找到。但并非所有的哈希方法都是一样的,这就是bcrypt突出之处所在。Node.js是一个流行的用于开......
  • 一致性哈希
    一致性哈希  一、什么是一致性哈希  一致性哈希是一种用于分布式系统中数据分片和负载均衡的算法。它的核心思想是将数据和节点通过哈希函数映射到一个固定范围的环形空间中,每个节点在环上占据一个位置,而数据则根据哈希函数计算出的值映射到环上的某个位置上。目前主要应......
  • P3396 哈希冲突
    原题链接题解正常暴力解法如下:#include<bits/stdc++.h>usingnamespacestd;inta[150007];intmain(){intn,m;cin>>n>>m;for(inti=1;i<=n;i++)cin>>a[i];while(m--){charop;cin>>op;i......
  • c++算法学习笔记 (20) 哈希表
    1.模拟散列表//拉链法#include<bits/stdc++.h>usingnamespacestd;constintN=100003;inth[N];inte[N],ne[N],idx;//存链voidinsert(intx){intk=(x%N+N)%N;//让负数的余数变成正数(若直接加N,则可能溢出)e[idx]=x;ne[idx]......