c# - 反转哈希函数

标签 c# algorithm hash

我有下面的散列函数,我正在尝试用我的方法来反转它,这样我就可以从散列值中找到键。

uint Hash(string s)
{
    uint result = 0;
    for (int i = 0; i < s.Length; i++)
    {
        result = ((result << 5) + result) + s[i];
    }
    return result;
}

代码是用 C# 编写的,但我认为它很清楚。

我知道对于一个散列值,可以有多个键,但我的目的不是全部找到,只要一个满足散列函数就足够了。

编辑:

函数接受的字符串仅由数字 0 到 9 以及字符“*”和“#”组成,因此 Unhash 函数也必须遵守此标准。

有什么想法吗?谢谢。

最佳答案

这应该反转操作:

string Unhash(uint hash)
{
    List<char> s = new List<char>();
    while (hash != 0)
    {
        s.Add((char)(hash % 33));
        hash /= 33;
    }
    s.Reverse();
    return new string(s.ToArray());
}

这应该返回一个字符串,该字符串提供与原始字符串相同的散列,但不太可能是完全相同的字符串。

关于c# - 反转哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4523553/

相关文章:

javascript - JavaScript 中的简单线性回归预测算法

algorithm - 数据结构 : Big O time cost

python - 防止在 Django 中提交多个表单

java - 是否有一个只有键而没有值的 java 哈希结构?

c# - IronPython w/C# - 如何读取 Python 变量的值

c# - 帮助 sql select 语法

c - 设计一个算法来判断是否存在这样一个键等于数组中其他两个键的总和

javascript - MurmurHash3_32 Java 返回负数

c# - 使用 Unity 的策略模式和依赖注入(inject)

java - Lotus Notes 日历报告