C - cipher加密解密逻辑



我找到了很多解决方案,但没有人比我更快问题是……

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

,因为您可以使用相同的方法来获得相同的信息。

最新更新