摘要函数,其输出大小< =输入大小

时间:2014-09-24 21:36:11

标签: java cryptography

我正在使用固定长度字段处理固定长度记录。其中一些领域是敏感的...想想帐号。让我们说我的记录中的帐号被定义为最多19个字节。我想找到(或创建)帐号的哈希值,其结果本身不超过19个字节。这样,我仍然可以通过该字段关联记录,原始值不可恢复,重要的是我的固定长度记录和字段大小不会改变。基本上,对于任何场a,f(a)= a'其中sizeof(a)== sizeof(a')。这是否可能,即使不加密安全?

2 个答案:

答案 0 :(得分:3)

如果要将散列的大小限制为19个字节,则可以简单地截断标准散列。显然,这增加了散列冲突的可能性(两个帐号散列到相同的值)。

另请参阅讨论截断的this question

但是,原始值可以通过蛮力恢复。帐号的数量可能不会很大,因此有人可以枚举它们,通过相同的散列算法运行它们,并确定给定记录的原始帐号。这是一个真正的漏洞,在实践中被利用来对数据进行去匿名化。

答案 1 :(得分:2)

我无法直接回答您的问题,但您所寻找的内容被称为"标记化,"我相信。使用标记化而不是简单的摘要或散列方案的一个原因是避免与冲突相关的问题。有些提供商甚至可以执行这种确切类型的标记化,例如用有效的(就格式而言)替换信用卡号码,该令牌可以像普通信用卡号码一样处理,而不会暴露任何信用卡号码敏感信息。