反向"公式"基于字符串

时间:2016-01-07 00:42:42

标签: c++

可以做出相反的过程吗?

string dir = textenc.Text;
uint EDI = 0x1505;
uint EDX = 0;
byte ECX = 0;

for ( int i = 0; i < dir.Length; i++ )
{
    if ( dir[ i ] != '.' && dir[ i ] != '\\' )
    {
        EDX = EDI;
        EDX = EDX << 5;
        ECX = ( byte )dir[ i ];
        EDX = EDX + EDI;
        EDX = EDX + ECX;
        EDI = EDX;
    }
};
return EDI;

dir是一个字符串,例如,当dir"data\font\tahoma.ttf"时,该函数的输出为:2114405758

有没有办法检索只给出输出编号的原始字符串?

2 个答案:

答案 0 :(得分:1)

没有

哈希函数忽略字符.\。您可以根据需要添加这些数量,但仍会计算相同的值。

注意:正如其他人所提到的,这是一个哈希函数,它会产生无限多的冲突。

答案 1 :(得分:0)

简短的回答是,这是不可能的。

很长的答案是,几乎不可能判断生成的散列是否对给定的输入是唯一的。

知道这一点的唯一方法是为所有可能的字符串组合生成哈希值,直到找到重复项;或者你没有重复,但在后来发生之前你将耗尽内存。还有一种情况是你不会长时间点击重复项,这也可能意味着哈希函数非常好但仍然不意味着它是可逆的。