【发布时间】:2011-02-24 14:43:41
【问题描述】:
今天我读到了 MD5 哈希,想知道这是否可能。 似乎是一个递归问题...... 或者有什么解决办法?
【问题讨论】:
-
这可能吗... md5(crap + x) == x ?就像在最后一页有自己的 MD5 信息的文档一样?
-
是的,正如我所写,这在理论上是可能的 - 但要做到这一点需要大量的尝试和运气......你不能用一个构建这样的文档拍摄。
今天我读到了 MD5 哈希,想知道这是否可能。 似乎是一个递归问题...... 或者有什么解决办法?
【问题讨论】:
这是另一个技巧......
在文件开头保存Hash,计算MD5已经排除了那个区域,只有重要的数据。
"HashMD5 = Md5.ComputeHash(bytes, 382, bytes.Length - 382)"
所以它只计算数据区域的哈希(自定义数据结构从文件缓冲区中偏移量 382 开始)
-----------示例数据结构如下-----------
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Ansi)>
<Serializable()> Structure MyData
Dim FileCheckSum() As Byte '16 bytes HASh for file 'Config.bin'
Dim Padding() As Byte ' 0xFF x 20 bytes
Dim RemoteDevice As RmtDevice
End Structure
开始使用“xxxx.FileSystem.WriteAllBytes()”将此 str 写入文件 config.bin
然后使用十六进制编辑器打开配置文件查找填充元素开始的位置(在我的情况下是 382)
稍后使用此编号作为偏移量来计算 MD5 而不是整个文件。这种方式对数据损坏几乎没有安全性。
注意!!- 只要结构元素/顺序/元素编号保持不变,填充起始位置保持不变。
为我工作..
在 .net 中测试
【讨论】:
好吧,只要您填写 MD5 总和,文件就会更改并获得一个新的 MD5 - 所以:不,这是不可行的。从理论上讲,只是反复试验可能会导致文档包含自己的哈希值……但该文档可能会非常乱码并且不包含任何有意义的内容。
但是在计算过程中可以用零(例如)填充 128 位。这个地方将保存 MD5 和,并且在稍后验证哈希时必须再次为零。
【讨论】:
理论上,这是可能的:可能的文件内容是无限的,可能的哈希不是。在实践中,能够完成它意味着您在算法中发现了一个漏洞,从而使哈希对安全目的毫无用处。
【讨论】:
考虑任何散列并想象向其中添加一些随机文本。由于您可以添加无限数量的可能文本,但只有可能的哈希值数量有限 ,必须有可能产生散列的文本。问题只是您可能没有足够的资源来找到它。
您可以尝试的是,是否有任何 MD5 散列值,在散列时为 yield themselves as a result(感谢 Francesco 提供的链接!):
对于 MD5 散列的所有可能排列,创建散列并将结果与原始结果进行比较。
【讨论】:
好吧,向文本添加 MD5 哈希会更改文本,从而更改 MD5 哈希。 无法计算包含要计算的 MD5 散列的文本的 MD5 散列。
【讨论】:
这是不可能的。
但是你可以根据文件内容的hash重命名文件,在不改变hash的情况下附加信息。
【讨论】:
您必须从计算中排除哈希和。然后你已经使用了它,但是你不能将哈希朗姆酒添加到文件的末尾,期望它是正确的,或者如果你计算出新的 yu 的运行,它将总是以新的 MD5 哈希结束。进入一个永无止境的故事:)
【讨论】: