首页
社区
课程
招聘
[求助]这个小小算法的逆函数是什么?
发表于: 2008-12-12 17:05 7148

[求助]这个小小算法的逆函数是什么?

2008-12-12 17:05
7148
这个小算法是:

X = (a+3) xor (a+7);

已知X,求a

想了一下午了,还没想出来,郁闷呢

谢谢老大们帮忙啦

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
因为你倒着想了
a可为无限多个
X就那几个
2008-12-12 17:09
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不是,这个是一个算法
X,a都是4个字节,而且最后的答案是X和a都有唯一的值
2008-12-12 18:03
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
当然后面的3和7是我写的一个比较特殊的值。后面的值可以是一个比如0x12345678这样的值。

求逆算法
2008-12-12 18:04
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
可能没有吧.
2008-12-12 18:53
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
6
似乎有解,等我的程序再调一调,看看对不对。如果确定了,我再发上来。
2008-12-12 21:44
0
雪    币: 399
活跃值: (38)
能力值: (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 =
......
2008-12-12 22:06
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
满4个字节,应该不会有这么多巧合吧,而且可以肯定是有唯一解的
2008-12-12 22:43
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
9
逆向算法答案确实不唯一,这个变换不是一一映射的,可惜目前还没找到可以完全成功的算法。

我的想法是把方程稍稍变换,变成一个可以判别的表达式,然后用类似二分法的方法将结果逐位地试出来,对数时间。

不过刚才发现了自己推导过程中的一处错误,无法得到一个单调的函数来计算。

第一次尝试以失败告终。

准备想别的方法,同时等待高人出手。
2008-12-12 23:14
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
10
定义域里没反函数
2008-12-13 06:52
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢大家捧场,大家不要看后面的常数,常数就当是个特别的数字,因为后面的数字也是经常变换的,是伪随机的,我只是举个例子说是3,7,就当满4字节好了。

退一步说,就算是没有唯一解,那反函数是什么呢?

我没有找出反函数,穷举能得到唯一解,试了好几个数了
2008-12-13 11:23
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
应该没反函数的,请封贴
2008-12-13 13:01
0
雪    币: 100
活跃值: (10)
能力值: ( 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的信息给丢了
2008-12-14 17:01
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
14
正解,正因为低两位信息丢了,所以可以肯定逆算法不是一对一的。

具体实现我还在思考当中,不过人目前的结果来看似乎是不存在逆算法的(穷举不算)
2008-12-14 18:36
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
15
大哥, LZ 问的是

Y = (X+c1) xor (X+c2) 的逆算法

已知 Y, 求 X
2008-12-14 19:38
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
16
哈哈哈,算出来了,不是穷举,就是按位进行判断。

结果确实不唯一,有的位可以是任意。我的算法可以给出一个满足要求的解和所有可以是任意的位的列表。

不过不知道我测试的数据是不是完善,仅用了几个数来测试。

等下写个随机数测试,就知道了。

哈哈哈哈。
2008-12-14 19:59
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
17
这的确可由低至高按bit来推
不过我想这应该跟lz想的反算法有所出路.
2008-12-14 20:03
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
18
哈哈,100个随机向量测试通过,算法应该是没啥问题了。

成功了。
2008-12-14 20:08
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
19
不过因为正向算法是多对一的,所以逆向算法是一对多的。

也就是说,不是任意给一个Y,都可以算出对应的X的,Y必须满足一定的形式。

然而,如果Y是正确的形式,可以给出所有满足Y = ( X + c1 ) xor ( X + c2 )的X集合。
2008-12-14 20:20
0
游客
登录 | 注册 方可回帖
返回
//