这就是我需要的东西(语言:C#4):
我正在构建一个可以提交投诉的系统。投诉提交后,您将获得一个唯一的9位数字,用于标识您在系统中的投诉。
为了安全(通过默默无闻的安全性)目的,我不希望票证ID是连续的。但我做想要使用数据库来生成顺序ID。
所以我需要的是一个双向快速的内射函数:序号到我的票证ID,从票证ID到序号。
这样我的数据库中的ticketId
是顺序的,但在向用户显示之前我会对其进行模糊处理,类似地,当我从用户那里得到一个数字时,我对它进行去混淆并使用它来查看在数据库中投诉。
混淆部分不需要太复杂,对普通公众来说“不够明显”。
例如,我可以简单地改变值的位数,这将得到我(对于8位值):
0 - > 0
1 - > 128个
2 - > 192个
3 - > 64个
4 - > 160个
5 - > 96等
答案 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您的号码,然后将其与您的序号一起存储在数据库的表格中。然后,当您收到哈希时,只需在数据库中查找序列号即可。
仅供参考,这不是真正的安全。你应该实现一个真正的密码系统。