假设我有一个包含2列的Access数据库表:一个是ID(从1到20000,顺序,每个都是唯一的),一个是Value(0到500之间的任何数字)。
如何在 简单 中混淆Value字段(使用ID或不使用ID),但有些有效?我期望比ROT13混淆稍微有效一些,但不是那么复杂,以至于decoing需要多行代码。解码以C#代码完成。混淆是通过Access中的计算字段完成的。
我将“加密”更改为“混淆”以反映目标的简单性,这不是为了防止“攻击”,而是为了避免不小心暴露数据。
答案 0 :(得分:7)
对于0到500之间的数字,加密基本上没用。
首先,长度太短,无法使用XOR等常规方法进行有效加密。一旦知道了一个值的值,就可以重新创建密钥来解密其他值。当您处理大量原始数据时,加密效果最佳。
其次,如果Access中的用户可以使用该数据,则加密算法也是如此,至少对于确定的人而言。如果他们可以看到用于加密值的计算,他们可能会创建自己的解密算法。
第三,只有501个可能的值,该值很容易受到字典攻击 - 即,某人只是猜测每个值,并且他们平均只需要猜测250次。这甚至比公文包上简单的3位数锁还要少。所以,加密可能对你没什么好处。
答案 1 :(得分:3)
你的目标/攻击者资料是什么?如果您的要求不仅仅是停止随意观看,那么您就有了不可或缺的要求......如果您只关心停止随意观看(最好称为混淆而不是加密),您可以尝试类似
的内容。 b = a % 7 == 0 ? ((a/7)*991) : a % 2 == 0 ? ((a/2)*787) : a * 317
在另一端
b = a % 991 == 0 ? ((a/991)*7) : a % 787 == 0 ? ((a/787)*2) : a/317
请注意,这非常弱,但您的要求不包括任何有用的加密形式。