Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
md5sum包含sum本身的文件? 我编写了一个C++的小程序,由一个EXE文件组成。_C++_Hash_Cryptography_Md5 - Fatal编程技术网

md5sum包含sum本身的文件? 我编写了一个C++的小程序,由一个EXE文件组成。

md5sum包含sum本身的文件? 我编写了一个C++的小程序,由一个EXE文件组成。,c++,hash,cryptography,md5,C++,Hash,Cryptography,Md5,我想在对话框中输入可执行文件本身的md5sum。它应该静态地嵌入到可执行文件中,以便可以从十六进制编辑器中看到,而不是动态计算。这是不可能的 如果在二进制文件中输入md5散列,则二进制文件将更改,因此md5散列文件也会更改。如果创建一个新的,并尝试将其添加到二进制文件中,则二进制文件将再次更改 所以最好是将散列放入一个文件中,读取该文件并显示其内容 另一种方法是创建二进制文件的md5哈希,然后将其附加到可执行文件中。为了获取该值,您读取二进制文件的最后32字节,并将其显示为md5。当然,如果您创

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

这是不可能的

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

所以最好是将散列放入一个文件中,读取该文件并显示其内容

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


如果以原始格式base 256而不是base 16存储128位md5哈希,则只需16字节。

将md5添加到文件后,该文件将具有不同的md5。无法在文件本身中获取md5。

正如@Shi和@matthewdaniel已经说过的,这不能直接完成。 但是,有两种变通方法是可行的:

计算应用程序的MD5,并将可执行文件打包到一个容器应用程序中,该容器应用程序只需提取并检查其MD5即可 编译代码并仅对代码段或除数据之外的其他段进行散列,然后添加MD5检查代码。这将起作用,因为MD5字符串将存储在数据段中,保持任何其他内存段的预计算哈希的有效性。
假设文件内容本身无法更改-由于答案中说明的原因,不可能更改。如果文件内容可以更改,例如,这只是表明可以更改,如果文件本身不需要相同,那么我认为可以创建这样的文件,即使非常困难。请参阅Wang e.t.all的研究。在计算散列时,您需要一些机制来跳过包含的散列。你应该考虑使用一个更好的散列函数MD5.@ PST:你指的是哪一篇论文?好的建议,我知道这是不可能的: