Sql server SQL Server哈希算法

Sql server SQL Server哈希算法,sql-server,sql-server-2008,hash,Sql Server,Sql Server 2008,Hash,如果我的输入长度小于哈希输出长度,是否有任何哈希算法可以保证没有冲突 我从本质上知道,由于散列的有损性质,单向散列可能会在多个输入之间发生冲突,特别是当考虑到输入大小通常大于输出大小时,但这是否仍然适用于较小的输入大小?使用带有随机选择的静态密钥的对称分组密码。加密永远不会产生重复,因为这将阻止明确的解密 该方案将强制输出一定长度的密码,该长度是密码块大小的倍数。如果您可以使用可变长度的输出,那么您也可以使用流密码。您的问题听起来像是在寻找一个完美的哈希函数。完美散列函数的问题在于,它们往往是针

如果我的输入长度小于哈希输出长度,是否有任何哈希算法可以保证没有冲突


我从本质上知道,由于散列的有损性质,单向散列可能会在多个输入之间发生冲突,特别是当考虑到输入大小通常大于输出大小时,但这是否仍然适用于较小的输入大小?

使用带有随机选择的静态密钥的对称分组密码。加密永远不会产生重复,因为这将阻止明确的解密


该方案将强制输出一定长度的密码,该长度是密码块大小的倍数。如果您可以使用可变长度的输出,那么您也可以使用流密码。

您的问题听起来像是在寻找一个完美的哈希函数。完美散列函数的问题在于,它们往往是针对特定的数据集定制的

以下假设您没有试图隐藏、保护或加密数据

从另一个角度考虑,要“生成”一个接受输入的完美哈希函数,最简单的方法是将要存储的数据映射到表中,并将这些输入与代理主键关联。然后为列(或多个列)创建唯一约束,以确保映射的输入仅映射到单个代理项值


代理项键可以是int、bigint或guid。这完全取决于要存储的行数。

如果已知输入长度很小,例如32位,那么实际上可以枚举所有可能的输入,并检查结果哈希是否存在冲突。这只会是4294967296个可能的输入,并且不会花费太长的时间来列举所有的输入。基本上,您将构建一个彩虹表来测试碰撞


但是,如果存在依赖于此的安全性,其中一个问题是,如果攻击者知道您的输入长度受到限制,那么他们也可以很容易地执行相同的枚举,以创建将哈希映射回原始值的映射/表。“攻击者”在这里是一个非常可怕的术语,因为我不知道您是如何使用这些哈希值的,也不知道您是否担心能够反转它们。

我会查看这些帖子。@Xedni,您的链接似乎指向同一个目标post@Dave.Gugg每只眼睛一个?一定是复制粘贴失败。不管怎样,似乎给出了一个合适的答案:)