c++ 利用“空格”解密有意义的英文段落

本文介绍了一种利用空格解密英文密文的方法,通过空格与字母异或的特性,结合密文段多次异或后的结果统计,找出空格位置并求得密钥,最终解密出原文。
摘要由CSDN通过智能技术生成

问题是这样的:

给定一定数目的密文段,让你利用这些密文段来解出目标密文的原文,这里给定的密文段是满足以下条件的:

(1)原文是一段有意义的英文段落,大部分包含‘A’~'Z','a'~'z',和空格,当然还有一些标点符号;

(2)密钥是随机产生的,并且长于任一给出的密文段,而且加密方式只是简单密钥异或原文;

(3)密文和密钥的每个字符都用两个16进制的数表示,所以还是先要转化一下。


思路:

利用“空格”!,首先我们可以试验:空格 XOR 'A' = 'a',空格 XOR 'a' = 'A',所以空格 XOR 小写字母 = 大写字母,空格 XOR 大写字母 = 小写字母。然而只有这个点还不够,我们还需要一个条件:密文 XOR 密文 = 原文 XOR 原文,即:

C1 = P1 XOR K

C2 = P2 XOR K

C1 XOR C2 = (P1 XOR K) XOR (P2 XOR K) = P1 XOR P2

由于原文是一段有意义的英文文段,并且大部分由’a’~’z’,’A’~’Z’和空格组成,所以我们可以假设当密文段足够多的时候,每个位置在不同的密文段会出现对应的空格,我把密文段两两在对应的位置异或,得到原文中空格的位置,这里我的判断是否为空格的标准是:如果结果为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值