2

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

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

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

所以我需要的是一个双向快速的单射函数:序号到我的票号,然后从票号返回到序号。

这样我ticketId的 in 数据库是连续的,但在向用户显示之前我会对其进行混淆,同样,当我从用户那里得到一个数字时,我会对其进行去混淆处理并使用它在数据库中查找投诉。

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

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

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

等等

4

3 回答 3

2

我认为你可以完美地解决这个问题:用常量密钥加密票号。您可以使用 32 位块大小的块密码。

于 2012-07-18T22:43:18.307 回答
1

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

于 2012-07-18T22:09:27.317 回答
0

为什么不这样做:

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

仅供参考,这不是真正的安全。您应该实施真正的密码系统。

于 2012-07-18T22:16:50.033 回答