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

RJI*_*IGO 1 c# encryption algorithm ms-access

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

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

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

ric*_*ent 7

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

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

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

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


Yau*_*aur 5

您的目标/攻击者概况是什么?如果您的要求不仅仅是停止随意观看,那么您就有不可能的要求...如果您只关心停止随意观看(这比加密更好地称为混淆),您可以尝试类似的方法

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

请注意,这是非常弱的,但您的要求排除了任何有用的加密形式。