我找到了很多解决方案,但没有人比我更快问题是……
A先生和B先生是朋友。他们想要加密他们的对话。所以他们发明了一种新的密码。每条消息都被编码成它的二进制表示然后写入K次,移位0,1,⋯K−1位。
如果B=1001010且K=4,它看起来是这样的:
`1001010
1001010
1001010
1001010`
然后执行异运算得到
1001010
1001010
1001010
1001010
--------------
1110100110 (ENCODED MESSAGE SEND TO B)
现在,这个编码的信息被提供给接收者(MR 'B'),其中包含以下信息
1)原字符串的位数(i。e7(在我们的例子中)
2)我们在原始字符串(这里是4)中执行的移位次数
3)编码字符串(这里是1110100110)
MR 'B'必须找到原始字符串1001010
请帮助我在逻辑,我怎么能找到原来的字符串我是MR 'B'
很简单,虽然这属于math.stachexchange.com
首先,让我们注意,如果1
的个数是奇数,则xor为1
,否则为0
。
那么,我们可以反着来:
???????
???????
???????
???????
1110100110
第一个是1
,所以必须有奇数个1
,并且只有一个空格,所以必须是1
!我们可以把它复制到其他地方:
1??????
1??????
1??????
1??????
1110100110
第二个说有奇数个1
,所以空格必须是0
:
10?????
10?????
10?????
10?????
1110100110
第三个相同,所以我们需要添加另一个0
:
100????
100????
100????
100????
1110100110
第四个数字是0
,因此我们需要添加一个1
以使1
的数字为偶数:
1001???
1001???
1001???
1001???
1110100110
依次类推:
10010??
10010??
10010??
10010??
1110100110
100101?
100101?
100101?
100101?
1110100110
1001010
1001010
1001010
1001010
1110100110
瞧!
注意,这样做实际上是安全的:
1001010
100101 0
10010 10 |--- Ignorable bits
1001 010 /
1110100
,因为您可以使用相同的方法来获得相同的信息。