C#Hash with Collision Domain

时间:2016-08-30 14:18:16

标签: c# search encryption hash

我正在开发一个加密字符串的项目,这是一个简单的部分。困难的部分是找到一种在加密前散列字符串的方法,该方法返回带有冲突域的值。该哈希将与加密字符串一起存储在数据库表中。

这样做的原因是在需要搜索单个记录时创建要解密的子集。如何使用C#实现这一目标?

1 个答案:

答案 0 :(得分:0)

我假设您需要帮助创建冲突域,最简单的方法是编写一个函数,将字符串转换为具有高冲突几率的新字符串,然后为查找值散列该新字符串。

private static int COLLISION_LENGTH = 5;
public static string CreateCollision(string oldValue)
{
    var chars = new char[COLLISION_LENGTH];

    for(int i = 0; i < oldValue.Length; i++)
    {
        chars[i % chars.Length] ^= oldValue[i];
    }

    return new String(chars);
}

然后您只需要使用您选择的哈希算法对CreateCollision的输出进行哈希处理,我建议使用强大的哈希系统,就像使用Rfc2898DeriveBytes之类的密码一样,并像你一样对待哈希会有密码(你需要使用固定的盐),因为这个哈希会泄漏有关你加密的数据的信息。

根据需要调整COLLISION_LENGTH