混淆乘以2

时间:2011-10-18 19:04:31

标签: math obfuscation

帮我提出一种混淆的方法,将数字乘以2,精确到第二个小数。

思路:

  • 使用俄语乘法技术
  • trig /其他数学身份
  • monte carlo methods
  • 但当然是CS技巧的奖励积分

编辑:

记得根据有效数字而不是准确的小数位来考虑这个问题可能更合适。所以请选择4个匹配的前导数字。

4 个答案:

答案 0 :(得分:1)

如果目标是混淆,那么就没有什么比一些红色鲱鱼和无用的物体结构更能分散那些从真正目标中读取代码的人的注意力。例如,不是直接使用任何数字,而是可以从字典中提取它,或者从另一个对象的长度(比如大小为2的列表)中获取它,或者甚至更好,在某些字符串中隐藏数字2,然后用一种难以阅读的模式正则表达它。

答案 1 :(得分:1)

由于你想制作简单的复杂,你可以用复杂的数字做一些愚蠢的事情。假设你有任何可用于复杂算术的库,你可以,例如,利用数学中最美丽的等式:e^(pi*i) + 1 = 0。例如在Java中使用Apache Commons Math(当然你会混淆变量名):

Complex i = new Complex(0, 1);
double two = i.multiply(Math.PI).exp().getReal() + 3 +  i.multiply(Math.PI).exp().getImaginary()*5;

实部是-1,所以加3给我们2.虚部是0,所以将它乘以5并加上它是一个没有做任何事情的红鲱鱼。*

只要这是为了好玩,您可以尝试使用其他类似标识的其他变体。但是,我不建议依靠这种类型的东西来真正混淆真实产品中的代码。有些软件包可以为您混淆代码,并且自动将变量名称更改为乱码可以大大阻止人类(同时仍然让代码保持可读性以便开发人员的理智)。

*在浮点运算中,虚部可能不是正好 0,但是你说你对两位小数的准确性感兴趣。

答案 2 :(得分:1)

以下perl one-liner将第一个命令行参数加倍:

perl -e '$/=$\=shift;map$\+=$//(++$|+$|)**$_,(++$...$=);print'

你可能会说使用perl是作弊的,因为perl中的所有东西都是混淆的。你不会完全错的。

这是(未经模糊处理的)python中稍微不同的方法:

import math
def double(n) :
    if n == 0 :
        return 0
    a = b = n
    for i in range(1,100) :
        a = 2 + 1.0/a
    a = a - 1
    for i in range(1,100) :
        b = a * b
        a = math.sqrt(a)
    return b

答案 3 :(得分:0)

由于这是作业,我不想只给你答案,但要考虑数字,因为它用二进制表示,你可以使用哪种二进制操作数可以帮助做乘法。