完美的散列函数来混淆顺序值

时间:2012-07-18 21:52:33

标签: c# algorithm perfect-hash

这就是我需要的东西(语言:C#4):

我正在构建一个可以提交投诉的系统。投诉提交后,您将获得一个唯一的9位数字,用于标识您在系统中的投诉。

为了安全(通过默默无闻的安全性)目的,我不希望票证ID是连续的。但我想要使用数据库来生成顺序ID。

所以我需要的是一个双向快速的内射函数:序号到我的票证ID,从票证ID到序号。

这样我的数据库中的ticketId是顺序的,但在向用户显示之前我会对其进行模糊处理,类似地,当我从用户那里得到一个数字时,我对它进行去混淆并使用它来查看在数据库中投诉。

混淆部分不需要太复杂,对普通公众来说“不够明显”。

例如,我可以简单地改变值的位数,这将得到我(对于8位值):

  

0 - > 0
  1 - > 128个
  2 - > 192个
  3 - > 64个
  4 - > 160个
  5 - > 96

     

3 个答案:

答案 0 :(得分:2)

我认为您可以完美地解决这个问题:使用常量密钥加密票号。 There is a 32-bit block-size block cipher that you can use.

答案 1 :(得分:1)

我建议采用对称加密的方式。例如,如果应用DES加密算法的替换和扩散步骤,则可以获得可以快速映射来回但很难找到模式的数字。它与您的示例几乎相同,但S-Box和P-Box值被证明对密码分析有效。

答案 2 :(得分:0)

为什么不做这样的事情:

SHA1您的号码,然后将其与您的序号一起存储在数据库的表格中。然后,当您收到哈希时,只需在数据库中查找序列号即可。

仅供参考,这不是真正的安全。你应该实现一个真正的密码系统。