我正在开发一个加密字符串的项目,这是一个简单的部分。困难的部分是找到一种在加密前散列字符串的方法,该方法返回带有冲突域的值。该哈希将与加密字符串一起存储在数据库表中。
这样做的原因是在需要搜索单个记录时创建要解密的子集。如何使用C#实现这一目标?
答案 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
。