以下是我要在永久链接中混淆数据库ID的方法:
1)XOR 带有冗长密钥的ID
2)以可逆的方式在XOR的整数中稍微加扰(旋转,翻转,反转)位
3)Base 62编码生成的整数,我自己的秘密扰乱了所有的序列 字母数字字符(A-Za-z0-9)
将我的Base 62编码转换回基数为10会有多困难?
同样对整个过程进行逆向工程有多难?(显然没有在源代码或编译代码中达到峰值)我知道'只有XOR'非常容易受到基本分析的影响。
编辑:结果应不超过8-9个字符,3DES和AES似乎会生成非常长的加密文本,并且实际上无法用于网址
结果字符串类似于:
In [2]: for i in range(1, 11):
print code(i)
...:
9fYgiSHq
MdKx0tZu
vjd0Dipm
6dDakK9x
Ph7DYBzp
sfRUFaRt
jkmg0hl
dBbX9nHk4
ifqBZwLW
WdaQE630
正如你所看到的,1看起来不像2,所以这似乎对于id的混淆效果很好。
答案 0 :(得分:2)
如果允许攻击者使用输入,那么技术娴熟的攻击者“解密”数据将是微不足道的。现代加密系统的一个重要特性是你的系统缺乏的“Avalanche effect”。基本上它意味着输出的每一位都与输入的每一位相连。
如果系统的攻击者被允许看到,例如,id = 1000产生输出“AAAAAA”并且id = 1001产生“ABAAA”并且id = 1002产生“ACAAA”,则算法可以容易地被反转,和获得的密钥的值。
尽管如此,这个问题更适合https://security.stackexchange.com/或https://crypto.stackexchange.com/
答案 1 :(得分:2)
任何试图开发自己的密码学的人的标准建议是“不要”。高级建议是阅读Bruce Schneier的Memo to the Amateur Cipher Designer,然后再阅读。
您不是第一个需要对ID进行模糊处理的人,因此已有可用的方法。 @CodesInChaos提出了一个很好的方法;你应该先尝试一下,看看它是否符合你的需求。