什么是“混淆”数值的简单但有效的方法?

时间:2012-03-15 19:49:02

标签: c# algorithm ms-access encryption

假设我有一个包含2列的Access数据库表:一个是ID(从1到20000,顺序,每个都是唯一的),一个是Value(0到500之间的任何数字)。

如何在 简单 中混淆Value字段(使用ID或不使用ID),但有些有效?我期望比ROT13混淆稍微有效一些,但不是那么复杂,以至于decoing需要多行代码。解码以C#代码完成。混淆是通过Access中的计算字段完成的。

我将“加密”更改为“混淆”以反映目标的简单性,这不是为了防止“攻击”,而是为了避免不小心暴露数据。

2 个答案:

答案 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

请注意,这非常弱,但您的要求不包括任何有用的加密形式。