恺撒密码的破译

在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

知道了恺撒加密的原理,破解起来也就相当的简单了,我们以加密后的密文为“mjqqt hwduytlwfumd”,介绍两种恺撒加密的破解方式:

 

第一种:

凯撒加密后的密文是通过原文按照固定的偏移形成的。偏移量也就只有1-25这25个取值,这里,我们可以将25种情况全部列出来,查看哪句是能够表达具体信息的句子。我编写了一个powershell脚本,列举了密文偏移后的全部可能:

[string]$a = "mjqqt hwduytlwfumd"
[char[]]$b = $a.ToCharArray()
[int]$cd = $a.Length

for($i=1;$i -le 25;$i++)
{
    [string]$f = ""
    for([int]$n = 1;$n -le $cd ;$n++)
    {
    [int]$c = $b[$n-1]
    if($c -ne 32)
    {
    [int]$d = $c + $i
    }else {$d = 32}
    if($d -gt 122){$d = $d - 26}
    [char]$e = $d
    [string]$f = $f + $e
    }
     echo $f
}

思路:我们先将整个字符串拆分成字符数组,依次将其中的字符,转换为ASCLL码,再将ASCLL码依次+1,再转换为字符,将多次的字符相加,得到字符串,输出字符串,就得到了平移一次后的结果。

需要注意:

1.因为密文中都是小写,所以只需要考虑的ASCLL码范围只有97-122,如果加出来的数超过了122,说明平移后的字母已经超过了“z”,那么需要减去26,再转换为字符。如果密文中有大写,则需要将大小写分开计算,大写的ASCLL取值为81-106。

2.密文中有空格,空格的ASCLL为32,需要单独提出来,不然空格的ASCLL会加上偏移量,形成新的字符。

编写完成后, 运行得到以下结果:

这里我们可以看到,列举出来的结果中,一直到倒数第五句,才有了具体含义。“hello cryptography”,“你好,密码学”。

第二种:

如果密文达到了一定的长度,我们就可以通过字母出现的频率进行分析,破解密文。一篇文章,出现“the”,"is",“a”,“and”,“to”等的概率一定会大于普通单词出现的概率,我们就可以通过列举出文章中字母出现的频率,去对比常用单词,算出其偏移量,再通过其他单词验证其偏移量,多次测试,确定其偏移量,从而破译密文。

 

由此可见,恺撒加密的方式,并不安全。如果小伙伴们有其他破译凯撒加密的方法,也欢迎在评论区一起讨论。

猜你喜欢

转载自blog.csdn.net/weixin_47931795/article/details/107160312