短(6位)加密密钥哈希

ale*_*xey 3 encryption hash cryptography

我必须实现一个简单的哈希算法.

输入数据:

  • 值(16位整数).
  • 钥匙(任何长度).

输出数据:

  • 6位散列(数字0-63).

要求:

  • 它应该是几乎不可能预测哈希值,如果你只需要输入值,但并不是关键.更具体一点:如果我知道x <M的hash(x),那么在不知道密钥的情况下很难预测散列(M).

可能的解决方案:

  1. 保持完整映射为关键.所以密钥长度为2 ^ 16*6位.这对我来说太长了.
  2. 线性代码.Key是生成矩阵.它的长度是16*6.但是使用几个已知的哈希值很容易找到生成矩阵.

还有其他可能性吗?

men*_*nsi 5

一个HMAC似乎是你想要的.因此,您可以使用基于SHA的HMAC并仅使用生成的哈希的子字符串.这应该是相对安全的,因为加密散列的位应该尽可能独立且不可预测.

根据您的环境,这可能需要花费太多的处理时间,因此您可能必须选择更简单的散列方案来构建您的HMAC.

原文回答评论中的讨论基于:

既然你无论如何都可以忘记加密属性(通过对5位散列的暴力攻击来发现碰撞是微不足道的)你也可以使用像CRC或汉明码这样的东西并免费获得错误检测