经典密码学——移位密码移位密码
移位密码的理论基础是数论中的模运算。
模运算的基本定义:假设A和B都是整数,M是正整数。如果m整除a-b,可以表示为ab(mod m),正整数m称为模。
模m上算术运算的定义:让表示集合{0,1,m-1},在其上定义了两个操作。加法()和乘法(x) ——运算类似于普通实数域中的加法和乘法,不同的是得到的值是取模后的余数。
因为英文中有26个字母,一般是在中定义的,所以很容易验证移位密码满足定义的密码系统1.1的条件,即存在任意x。
如果K=3,二级密码系统通常被称为凯撒密码,因为它最初是由儒勒凯撒使用的。
用移位密码加密普通英语句子,首先必须建立英语字母与模26残基的一一对应关系:例如A=1,B=2,Z=25,如下表所示:
例如,假设移位密码的密钥为K=11,明文为wewillmeetatmidnight。
首先,将明代的字母与其对应的整数对应起来,得到如下的数字串:
22 04 22 08 11 11 12 04 04 19
00 19 12 08 03 13 08 06 07 19
然后,将每个数字加到11,然后对总和取模26,得到:
07 15 07 19 22 22 23 15 15 04
11 04 23 19 14 24 19 17 18 04
最后转换成对应的字符串,即密文为HPHTWWXPPELEXTOYTRSE。
要解密密文,您只需要执行相应的逆过程。
然而,移位密码(模块26)是不安全的,可以通过穷举密钥搜索方法来破译。因为密钥空间太小,只有26种可能的情况,所有可能的密钥都可以用尽,得到我们想要的有意义的明文。
代码实现(Python 3)
def shift _ cipher _ encrypt(text :字符串,密钥=13):
符号='ABCDEFGHIJKLMNOPQRSTUVWXYZ '
已翻译=' '
对于文本:中的符号
符号=symbol.upper()
符号:中的if符号
符号索引=符号.查找(符号)
translatedIndex=(符号索引键)amp
翻译=翻译符号[翻译索引]
elif符号=='或符号==' . ':
翻译的=翻译的符号
打印(翻译)
def shift _ cipher _ decrypt(text :字符串,密钥=13):
SYMBOLS=' abcdefghijklmnopqrstuvwxyz '
已翻译=' '
对于文本:中的符号
符号=symbol.lower()
符号:中的if符号
符号索引=符号.查找(符号)
translatedIndex=(符号索引键)amp
翻译=翻译符号[翻译索引]
elif符号=='或符号==' . ':
翻译的=翻译的符号
打印(翻译)
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/132061.html