【问题标题】:Reverse bob jenkins hash function反向 bob jenkins 哈希函数
【发布时间】:2012-03-27 11:47:26
【问题描述】:

有谁知道我可以如何反转这个函数来生成原始输入字符串? 如标题所示,这是一个 Bob jenkins 哈希函数,所有输入都是文件夹名称或带扩展名的文件名。

public static uint Hash(string str)
    {
        uint value = 0, temp;
        var index = 0;
        var quoted = false;

        if (str[index] == '"')
        {
            quoted = true;
            index++;
        }

        str = str.ToLower();

        for (; index < str.Length; index++)
        {
            var v = str[index];

            if (quoted && (v == '"')) break;

            if (v == '\\')
                v = '/';

            temp = v;
            temp = temp + value;
            value = temp << 10;
            temp += value;
            value = temp >> 6;
            value = value ^ temp;
        }

        temp = value << 3;
        temp = value + temp;
        var temp2 = temp >> 11;
        temp = temp2 ^ temp;
        temp2 = temp << 15;

        value = temp2 + temp;

        if (value < 2) value += 2;

        return value;
    }

【问题讨论】:

    标签: hash reverse


    【解决方案1】:

    你不能。该函数接受任何字符串并且只返回一个无符号的int - 它通常不可能是可逆的。

    【讨论】:

    • 好的,感谢您的回答,是否有可能使用蛮力从返回的 int 中计算出原始字符串?
    • 没有。哈希是单向函数。如果您只有一个哈希,那么您可以通过蛮力做的最好的事情是找到映射到该哈希的所有可能字符串 - 并且该集合可以是 infinite
    猜你喜欢
    • 2014-06-19
    • 1970-01-01
    • 2019-05-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2012-01-08
    相关资源
    最近更新 更多