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

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

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

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

你的目标/攻击者资料是什么? 如果您的要求不仅仅是停止随意查看,那么您就有了不可或缺的要求……如果您只关心停止随意观看(这更好地称为混淆而不是加密),您可以尝试类似

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

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

对于0到500之间的数字,加密基本上是无用的。

首先,长度太短而不能使用诸如XOR的常规手段进行有效加密。 一旦知道了一个值的值,就可以重新创建密钥来解密其他值。 当您处理大量原始数据时,加密效果最佳。

其次,如果Access中的用户可以使用该数据,则加密算法也是如此,至少对于确定的人来说也是如此。 如果他们可以看到用于加密值的计算,他们可能会创建自己的解密算法。

第三,只有501个可能的值,该值很容易发生字典攻击 – 即,有人只是猜测每个值,而他们平均只需要猜测250次。 这甚至比公文包上简单的3位数锁还要少。 所以,加密可能对你没什么好处。