Hash 如何生成散列到自身的MD5散列值?

Hash 如何生成散列到自身的MD5散列值?,hash,md5sum,Hash,Md5sum,是否可以生成一个文本文件,其内容是文件的hash/md5值 如何编写程序?如果存在这样的文件,可以通过尝试每个可能的MD5哈希并检查其MD5哈希是否等于它来生成该文件。但由于所有可能的MD5哈希都是有限集,这样一个特殊的MD5值可能根本不存在 注意:您只询问是否可能,而不是询问需要多长时间。如果存在这样的文件,可以通过尝试每个可能的MD5哈希并检查其MD5哈希是否等于它来生成它。但由于所有可能的MD5哈希都是有限集,这样一个特殊的MD5值可能根本不存在 注意:您只询问是否可能,而不是询问需要多长

是否可以生成一个文本文件,其内容是文件的hash/md5值


如何编写程序?

如果存在这样的文件,可以通过尝试每个可能的MD5哈希并检查其MD5哈希是否等于它来生成该文件。但由于所有可能的MD5哈希都是有限集,这样一个特殊的MD5值可能根本不存在


注意:您只询问是否可能,而不是询问需要多长时间。

如果存在这样的文件,可以通过尝试每个可能的MD5哈希并检查其MD5哈希是否等于它来生成它。但由于所有可能的MD5哈希都是有限集,这样一个特殊的MD5值可能根本不存在


注意:您只询问是否可能,而不是询问需要多长时间。

我也感兴趣,因此我编写了以下pascal程序:

program hash;

uses md5;

var a, b: string;

begin

b:='d41d8cd98f00b204e9800998ecf8427e'; //md5sum of /dev/null

repeat

a:=md5Print(md5String(b));
b:=md5Print(md5String(a));

until a=b;

writeln(a);
writeln(b);

end.

它已经运行了大约五天,但仍然没有结果。)

我也很感兴趣,所以我编写了以下pascal程序:

program hash;

uses md5;

var a, b: string;

begin

b:='d41d8cd98f00b204e9800998ecf8427e'; //md5sum of /dev/null

repeat

a:=md5Print(md5String(b));
b:=md5Print(md5String(a));

until a=b;

writeln(a);
writeln(b);

end.

它已经运行了大约五天,但仍然没有结果。)

请注意,如果你想强行使用它,三甲氧基的方法从根本上是有缺陷的。每个散列有效地指向另一个随机散列,并且随着散列序列的增加,任何新访问的散列都越来越可能简单地将您指向先前访问的散列,形成数百万或数十亿个散列的循环

如果我们假设MD5的整个散列空间不是一个单一的循环循环(这是极不可能的),那么几乎所有的值都处于一个竞争性的短循环中,这使得绝大多数MD5散列无法访问


基本上,即使存在自映射散列,这种方法仍然更可能将自身置于无限循环中,而不是实际找到无限循环。

请注意,如果您希望对其进行暴力,三甲氧基的方法从根本上是有缺陷的。每个散列有效地指向另一个随机散列,并且随着散列序列的增加,任何新访问的散列都越来越可能简单地将您指向先前访问的散列,形成数百万或数十亿个散列的循环

如果我们假设MD5的整个散列空间不是一个单一的循环循环(这是极不可能的),那么几乎所有的值都处于一个竞争性的短循环中,这使得绝大多数MD5散列无法访问


基本上,即使存在自映射散列,这种方法仍然更可能将自身置于无限循环中,而不是实际找到无限循环。

我同意@satuon的观点,这里有一个例子。我所期望的是计算给定函数f(x)的md5中的x(f(x))==x。除了暴力,似乎没有更好的方法了。我同意@satuon,这里有一个例子。我所期望的是计算给定函数f(x)的md5中的x(f(x))==x。看来没有比暴力更好的办法了。