首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >短(6位)加密键控散列

短(6位)加密键控散列
EN

Stack Overflow用户
提问于 2012-04-10 12:17:42
回答 2查看 1.4K关注 0票数 3

我必须实现一个简单的散列算法。

输入数据:

  • 值(16位整数)。
  • 键(任意长度)。

产出数据:

  • 6位散列(编号0-63).

要求:

  • 如果只有输入值,而不是键,则几乎不可能预测哈希值。更具体的是:如果我知道x< M的散列(X),那么在不知道键的情况下很难预测散列(M)。

可能的解决办法:

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

还有其他的可能性吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-10 12:24:56

HMAC似乎是你想要的。因此,您可以使用基于SHA的HMAC,只需使用结果哈希的子字符串。这应该是相对安全的,因为加密散列的比特应该尽可能独立和不可预测。

但是,根据您的环境,这可能会花费太多的处理时间,因此您可能不得不选择一个更简单的散列方案来构造HMAC。

原始答案在评论中的讨论是基于:

由于您无论如何都可以忘记密码属性(通过对5位哈希的蛮力攻击来查找冲突是很简单的),所以您最好使用CRC或Hamming代码,并免费获得错误检测。

票数 5
EN

Stack Overflow用户

发布于 2013-01-21 20:34:14

Mensi建议使用截断的HMAC是一个很好的建议,但是如果您碰巧在一个高度受限的系统上并且想要更快或更简单的东西,您可以使用任何分组密码,用它加密您的16位值(填充到一个完整块),并将结果截断到6位。

与计算伪随机函数的HMAC不同,块密码是伪随机置换 --每个输入都映射到不同的输出。但是,当您丢弃块密码输出的除六位以外的所有比特时,剩下的内容将非常类似于伪随机函数。对于重复的输出,会有一个很小的偏差,但是(假设分组密码的块大小比它应该有的6位大得多),它会非常小,几乎是无法检测的。

对于非常低端的系统来说,一个很好的分组密码选择可能是或其继任者XTEAXXTEA。虽然对这些密码有一些已知的攻击,但它们都需要比应用程序中可能的更广泛的访问密码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10088645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档