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

MD5哈希长度延展攻击

时间:2024-04-18 15:24:14浏览次数:26  
标签:hash 填充 padding length 延展 哈希 data MD5

MD5哈希长度延展攻击原理

  1. 已知原始消息 ( m ) 和其对应的哈希值 ( h )。

  2. 选择额外数据 ( m’ )。

  3. 计算填充,使得填充后的消息长度满足长度模512等于448,并包含新消息的长度信息。

  4. 构造新消息 ( m + \text{填充} + m’ )。

  5. 计算新消息的哈希值 ( h’ )。

代码

import hashlib
import binascii

# 已知的消息 m 和对应的哈希值 h
m = b"2021130120211301202113012021130120211301"
h = binascii.unhexlify("f67ad8b1a25d84c8ed0558d95ee892ed")

# 额外数据 m'
additional_data = b";extra_data"

# 构造填充
# 填充格式为:0x80 + 0x00*(填充长度-1)+ 消息长度(以little-endian编码的64位整数)
original_length = len(m)
new_length = original_length + len(additional_data)  # 新消息的长度,以字节为单位

padding_length = (64 - (new_length + 8) % 64) % 64  # 计算填充长度,使得填充后总长度模 512 等于 448
padding = b"\x80"  # 添加比特 1
padding += b"\x00" * (padding_length - 1)  # 添加 0
padding += new_length.to_bytes(8, byteorder='little')  # 添加消息长度,占用 64 位

# 计算新消息的哈希值
# 这里我们不需要知道密钥k,只需要利用原始消息的哈希值和额外数据来计算新消息的哈希值
new_hash = hashlib.md5()
new_hash.update(padding + additional_data)  # 更新哈希对象时,将填充和额外数据一起传递
forged_hash = new_hash.digest()

# 打印结果
print("Original message: ", m)
print("Additional data: ", additional_data)
print("Forged message: ", m + padding + additional_data)
print("Forged hash: ", binascii.hexlify(forged_hash))

# 检查是否与目标哈希值一致
if forged_hash == h:
    print("Successfully forged a valid hash!")
else:
    print("Failed to forge a valid hash.")

详细说明

  1. 首先写入消息m和哈希值h;自己写入额外添加数新消息据;运行代码后,会生成新的哈希值

标签:hash,填充,padding,length,延展,哈希,data,MD5
From: https://www.cnblogs.com/pengqiqi/p/18143574

相关文章

  • md5强比较绕过
    p1=ten%0D%0A%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%EF%E4%B5h%A7y%95C%60%8A%E0a%0B%B8%3D%D8%26%F5%A3%13%8F%3F%7D%D4%5......
  • 哈希
    简介哈希是一种能把字符串(实际上数组也行,不过本文都会以字符串为例)映射成一个数的算法,哈希就是把一个字符串转成一个\(K\)进制数,但由于得到的数可能会非常大,所以其中会用到取模,因此哈希也有些玄学(建议CF有赛后hack的比赛不要使用哈希,或提高哈希的安全度)。普通哈希可以将......
  • MD5哈希长度延展攻击(选做)
    任务描述:在一个使用MD5哈希算法的系统中,管理员使用了一个密钥k和命令cmd的组合来生成每个命令的签名:hash(k||cmd)。你已经获得了一个允许查看文件的命令cmd=viewfile和对应的签名h,但你希望通过哈希长度延展攻击,生成一个新的签名,该签名能够让你执行删除文件的命令(删除文件的命令为......
  • MD5哈希长度延展攻击(选做)
    MD5哈希长度延展攻击(选做)任务任务描述:在一个使用MD5哈希算法的系统中,管理员使用了一个密钥k和命令cmd的组合来生成每个命令的签名:hash(k||cmd)。你已经获得了一个允许查看文件的命令cmd=viewfile和对应的签名h,但你希望通过哈希长度延展攻击,生成一个新的签名,该签名能够让你执行......
  • MD5哈希长度延展攻击
    任务描述:在一个使用MD5哈希算法的系统中,管理员使用了一个密钥k和命令cmd的组合来生成每个命令的签名:hash(k||cmd)。你已经获得了一个允许查看文件的命令cmd=viewfile和对应的签名h,但你希望通过哈希长度延展攻击,生成一个新的签名,该签名能够让你执行删除文件的命令(删除文件的命令为......
  • MD5哈希长度延展攻击(选做)
    一、理解长度扩展攻击(lengthextensionattack),是指针对某些允许包含额外信息的加密散列函数的攻击手段。对于满足以下条件的散列函数,都可以作为攻击对象:①加密前将待加密的明文按一定规则填充到固定长度(例如512或1024比特)的倍数;②按照该固定长度,将明文分块加密,并用前一个......
  • MD5哈希长度延展攻击
    1.哈希长度延展攻击的机制哈希长度延展攻击利用的是哈希函数如MD5和SHA-1的特性。当计算哈希时,如果攻击者知道原始数据的哈希值但不知道原始数据内容,他们仍然可以在原始数据后添加一些数据,并且能计算出新数据串的哈希值,而不需要知道原始数据是什么。对于MD5哈希函数,攻击者利用......
  • MD5
    对于满足以下条件的散列函数,都可以作为攻击对象:①加密前将待加密的明文按一定规则填充到固定长度(例如512或1024比特)的倍数;②按照该固定长度,将明文分块加密,并用前一个块的加密结果,作为下一块加密的初始向量(InitialVector)。满足上述要求的散列函数称为Merkle–Damgård散列函数(Me......
  • MD5哈希长度延展攻击
    任务详情任务描述:在一个使用MD5哈希算法的系统中,管理员使用了一个密钥k和命令cmd的组合来生成每个命令的签名:hash(k||cmd)。你已经获得了一个允许查看文件的命令cmd=viewfile和对应的签名h,但你希望通过哈希长度延展攻击,生成一个新的签名,该签名能够让你执行删除文件的命令(删除文......
  • 代码随想录算法训练营第7天 | 哈希表 454.四数相加II 383. 赎金信 15. 三数之和 18.
    leetcode454.四数相加II题目454.四数相加II解题思路实现代码leetcode383.赎金信题目383.赎金信解题思路实现代码leetcode15.三数之和题目15.三数之和解题思路实现代码leetcode454.四数相加II题目18.四数之和解题思路实现代码......