md5sum包含总和本身的文件?

时间:2011-08-13 22:27:40

标签: c++ hash cryptography md5

我在C ++中编写了一个由单个EXE文件组成的小应用程序。

我想在其“about”对话框中输入可执行文件本身的md5sum。它应该静态嵌入到可执行文件中(这样可以从十六进制编辑器中看到),而不是动态计算。

3 个答案:

答案 0 :(得分:0)

这是不可能的。

如果在二进制文件中输入md5哈希值,二进制文件将会更改,因此md5哈希值也会更改。如果您创建一个新的,并尝试将其添加到二进制文件,二进制文件将再次更改。

最好将哈希放入文件中,然后读取该文件并显示其内容。

另一种方法是创建二进制文件的md5哈希值,然后将其附加到可执行文件中。为了获取该值,您将读取二进制文件的最后32个字节并将其显示为md5。当然,如果您创建完整可执行文件的哈希值,它将与哈希值不匹配 - 您必须创建除最后32个字节之外的可执行文件的哈希值。

如果以原始格式存储128位md5哈希值(基数为256而不是基数为16),则只需要16个字节。

答案 1 :(得分:0)

和@Shi& @matthewdaniel已经说过,这不能直接完成 但是,有几种解决方法是可行的:

  • 计算应用程序的MD5,并将您的可执行文件打包到一个容器应用程序中,该应用程序将简单地提取它并检查它是MD5
  • 编译代码并仅散列代码段或其他段(数据除外),然后添加MD5检查代码。这将起作用,因为MD5字符串将存储在数据段中,以保持任何其他内存段的预先计算的哈希值的有效性。

答案 2 :(得分:-1)

只要将md5添加到文件中,文件就会有不同的md5。无法在文件本身中获取md5。