能力值:
( LV9,RANK:180 )
|
-
-
2 楼
因为你倒着想了
a可为无限多个
X就那几个
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
不是,这个是一个算法
X,a都是4个字节,而且最后的答案是X和a都有唯一的值
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
当然后面的3和7是我写的一个比较特殊的值。后面的值可以是一个比如0x12345678这样的值。
求逆算法
|
能力值:
( LV9,RANK:180 )
|
-
-
5 楼
可能没有吧.
|
能力值:
(RANK:260 )
|
-
-
6 楼
似乎有解,等我的程序再调一调,看看对不对。如果确定了,我再发上来。
|
能力值:
(RANK:350 )
|
-
-
7 楼
X,a都是4个字节
你这个概念很模糊,这里说4个字节的意义是什么?
0放入任意多个字节还是0
0h
00h
0000h
00000000h
4 = (0+3) xor (0+7)
C = (1+3) xor (1+7)
C = (2+3) xor (2+7)
C = (3+3) xor (3+7)
C = (4+3) xor (4+7)
4 = (5+3) xor (5+7)
4 = (6+3) xor (6+7)
4 = (7+3) xor (7+7)
4 = (8+3) xor (8+7)
1c = (9+3) xor (9+7)
1c = (10+3) xor (10+7)
1c = (11+3) xor (11+7)
1c = (12+3) xor (12+7)
4 =
......
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
满4个字节,应该不会有这么多巧合吧,而且可以肯定是有唯一解的
|
能力值:
(RANK:260 )
|
-
-
9 楼
逆向算法答案确实不唯一,这个变换不是一一映射的,可惜目前还没找到可以完全成功的算法。
我的想法是把方程稍稍变换,变成一个可以判别的表达式,然后用类似二分法的方法将结果逐位地试出来,对数时间。
不过刚才发现了自己推导过程中的一处错误,无法得到一个单调的函数来计算。
第一次尝试以失败告终。
准备想别的方法,同时等待高人出手。
|
能力值:
(RANK:1060 )
|
-
-
10 楼
定义域里没反函数
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
谢谢大家捧场,大家不要看后面的常数,常数就当是个特别的数字,因为后面的数字也是经常变换的,是伪随机的,我只是举个例子说是3,7,就当满4字节好了。
退一步说,就算是没有唯一解,那反函数是什么呢?
我没有找出反函数,穷举能得到唯一解,试了好几个数了
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
应该没反函数的,请封贴
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
不知道考虑得对不?
X = (a+3) xor (a+7);
可以将a+3用b替换,X=b xor (b+4)
现在由X->b
关键是分析X和b的关系
b xor b+4
xxxxxyzz (xxxxxy+1)zz
X的低两位肯定是0,将b低2bits的信息给丢了
|
能力值:
(RANK:260 )
|
-
-
14 楼
正解,正因为低两位信息丢了,所以可以肯定逆算法不是一对一的。
具体实现我还在思考当中,不过人目前的结果来看似乎是不存在逆算法的(穷举不算)
|
能力值:
( LV9,RANK:180 )
|
-
-
15 楼
大哥, LZ 问的是
Y = (X+c1) xor (X+c2) 的逆算法
已知 Y, 求 X
|
能力值:
(RANK:260 )
|
-
-
16 楼
哈哈哈,算出来了,不是穷举,就是按位进行判断。
结果确实不唯一,有的位可以是任意。我的算法可以给出一个满足要求的解和所有可以是任意的位的列表。
不过不知道我测试的数据是不是完善,仅用了几个数来测试。
等下写个随机数测试,就知道了。
哈哈哈哈。
|
能力值:
( LV9,RANK:180 )
|
-
-
17 楼
这的确可由低至高按bit来推
不过我想这应该跟lz想的反算法有所出路.
|
能力值:
(RANK:260 )
|
-
-
18 楼
哈哈,100个随机向量测试通过,算法应该是没啥问题了。
成功了。
|
能力值:
(RANK:260 )
|
-
-
19 楼
不过因为正向算法是多对一的,所以逆向算法是一对多的。
也就是说,不是任意给一个Y,都可以算出对应的X的,Y必须满足一定的形式。
然而,如果Y是正确的形式,可以给出所有满足Y = ( X + c1 ) xor ( X + c2 )的X集合。
|
|
|