Esk*_*ola 33
如果您知道算法是如何工作的,可能会有一些聪明的数学方法来找出它(或证明不存在).
但是因为我很懒,而且CRC32只有2 ^ 32个值,所以我会蛮力.在等待算法遍历所有2 ^ 32值时,我会使用Google和Stack Overflow来查找某人是否有解决方案.
对于SHA-1,MD5和其他或多或少的加密安全算法,我会受到设计这些算法并放弃的数学家的威胁.
编辑1:暴力迫害......到目前为止,我找到了一个; CC4FBB6A采用big-endian编码.可能还有更多.我正在检查4种不同的编码:ASCII大写和小写,以及二进制big-endian和little-endian.
编辑2:蛮力完成.结果如下:
CC4FBB6A(big-endian)
FFFFFFFF(big-endian&little-endian)
32F3B737(大写ASCII)
代码在这里.在我的超频C2Q6600上运行大约需要1.5小时.现在该程序是单线程的,但很容易使它成为多线程,这将提供良好的线性可伸缩性.
M.A*_*nin 10
除了Jerry Coffin和Esko Luontola对一个不寻常问题的良好答案之外,我想补充一下:
在数学上,我们正在寻找X,使得F(X)= X,其中F是校验和函数,X是数据本身.由于校验和的输出是固定大小的,并且我们要查找的输入具有相同的大小,因此无法保证这样的X甚至存在!很可能固定大小的每个输入值都与该大小的不同值相关.
编辑:您的问题没有指定校验和应该在文件中格式化的确切方式,所以我假设你的意思是校验和的字节表示.当字符串和编码以及格式化字符串出现时,事情变得更加复杂.