带有冲突域的c#哈希

本文关键字:哈希 冲突 | 更新日期: 2023-09-27 18:04:49

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

这样做的原因是创建一个子集,以便在需要搜索单个记录时进行解密。如何使用c#来实现呢?

带有冲突域的c#哈希

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

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