1

以下是我将要在永久链接中混淆数据库 ID 的方法:

1)用一个冗长的密钥对 id 进行异或

2)以可逆的方式在异或整数中稍微加扰(旋转,翻转,反转)位

3) Base 62用我自己的所有字母数字字符的秘密加扰序列对结果整数进行编码 (A-Za-z0-9)

将我的 Base 62 编码转换回 Base 10 有多难?

另外,对整个过程进行逆向工程有多困难?(显然没有在源代码或编译代码上取得高峰)我知道“只有 XOR”很容易受到基本分析的影响。

编辑:结果不应超过 8-9 个字符长,3DES 和 AES 似乎会产生很长的加密文本,并且不能在 URL 中实际使用

生成的字符串如下所示:

In [2]: for i in range(1, 11):
    print code(i)
   ...:     
9fYgiSHq
MdKx0tZu
vjd0Dipm
6dDakK9x
Ph7DYBzp
sfRUFaRt
jkmg0hl
dBbX9nHk4
ifqBZwLW
WdaQE630

正如你所看到的,1 看起来一点也不像 2,所以这似乎非常适合混淆 id。

4

2 回答 2

2

任何试图开发自己的密码学的人的标准建议是“不要”。高级建议是阅读 Bruce Schneier给业余密码设计师的备忘录,然后不要阅读。

您不是第一个需要混淆 ID 的人,因此已经有可用的方法。@CodesInChaos 在上面提出了一个好方法;您应该先尝试一下,看看它是否满足您的需求。

于 2013-02-22T16:19:23.637 回答
2

如果允许攻击者玩弄输入,那么熟练的攻击者“解密”数据将是微不足道的。现代加密系统的一个关键特性是您的系统所缺乏的“雪崩效应”。基本上,这意味着输出的每一位都与输入的每一位相连。

如果允许您系统的攻击者看到,例如,id = 1000 产生输出“AAAAAA”,id=1001 产生“ABAAA”,而 id=1002 产生“ACAAA”,那么算法可以很容易地反转,并且值获得的密钥。


也就是说,这个问题更适合https://security.stackexchange.com/https://crypto.stackexchange.com/

于 2013-02-22T15:10:02.837 回答