这里是我需要的(语言: C# 4):
我正在建立一个你可以投诉的系统。在提交投诉后,您将获得一个唯一的9位数字号码,该号码标识系统中的投诉。
出于安全(通过模糊方式进行安全)的目的,我不希望票证I是顺序的。但是I do想要使用数据库来生成顺序id。
因此,我需要的是一个内射函数,它是双向快速的:序列号到我的票证id,然后从票证id返回到序列号。
因此,我在数据库中的ticketId是连续的,但在向用户显示它之前,我会混淆它,类似地,当我从用户那里得到一个数字时,我去混淆它,并使用它在数据库中查找投诉。
混淆部分不需要太复杂,只是对一般公众来说“不够明显”。
例如,我可以简单地更改值的位数,这将使我(对于8位值):
0 -> %0 1 -> 128 2 -> 192 3 -> 64 4 -> 160 5 -> 96 等。
发布于 2012-07-18 22:43:18
我认为您可以很好地解决这个问题:用常量密钥加密票证号码。有一个32位的块大小的分组密码,你可以使用。
发布于 2012-07-18 22:09:27
我建议一些类似对称加密的方法。例如,如果应用DES加密算法的替换和扩散步骤,您可以得到一个可以快速来回映射但很难找到模式的数字。它与您的示例几乎相同,但S-Box和P-Box值被证明对密码分析是有效的。
发布于 2012-07-18 22:16:50
为什么不这样做呢?
SHA1您的号码,然后将其存储在数据库中的一个表中以及您的序列号中。然后,当您收到哈希时,只需在数据库中查找序列号即可。
这不是真正的安全。您应该实现一个真正的密码系统。
https://stackoverflow.com/questions/11550916
复制相似问题