2023年7月31日发(作者:)
tougao1@技术与应用趣学Python伏魔平天下——恺撒密码王丽丽 上海市世界外国语中学● 情境导入赢了守护使这一关,阿派终于进入了那一方神秘世界。一路上,他披荆斩棘、伏魔降妖平天下,并获得了胜利的奖励——魔法羊皮卷。展开卷宗,只有一行看不懂的咒语,内容是PQ ETQUU PQ ETQYP。阿派照着字母念了几遍,都没有任何动静。忽然,他想到一种古老的加密方法——恺撒密码。于是,他一遍又一遍地尝试,终于发现若将所有字母都往前移2位,就可以形成一句有含义的话:NO CROSS NO CROWN(不经历风雨,怎能见彩虹)。阿派大声朗读出破解的咒语,只见一道金光闪现。这节课的设计灵感来源于恺:撒密码的故事。传说,古罗马皇帝恺撒在打仗时曾经使用“字母错位”的方法来加密军事情报。本课中,教师带领学生理解这种古老而简单的加密方法,并利用Python语言实现加密和解密。● 恺撒密码的加密和解密思想在苏托尼厄斯于公元二世纪写的《恺撒传》中,对恺撒密码作了详细描述,简而言之,就是将真正的信件内容(明文)中的每一个字母用其后的第N个字母代替,转换成一封密信(密文)。这样,即便敌军截住信件,也不知其意。据说,这种加密方法在当时的古罗马颇为流行。这种将字母表中的字母移动一定位置而实现加密的方法,被称为“恺撒移位密码”,简称“恺撒密码”。移动的位数N就是加密和解密的密钥。如图1所示,前文中破解咒语的密钥为2,也就是明文和密文表中的字母相错两位。A加密后所对应的字母就是后两位的字母C,以此类推,且A~Z循环,因此,字母Z的加密字母为B,解码的过程正好与之相反。恺撒密码的编码方法相对简:单,密钥也只有25种,只需逐个试验,很容易破解,但这种加密、解密的思想影响深远。现今的密码术不断发展,大致可分为两种方法,即移位和替换,或者将两者结合产生更复杂的方法,但万变不离其宗,其核心还是算法和密钥。● 破解咒语恺撒密码的算法思想,前面已经解读,此处不再赘述。但在Python中实现咒语的破解(解密),还需要了解字符在计算机中的表示方式。英文字母在计算机中通常采用ASCII码表示,占一个字节。如图2所示,密文中的字符P转换为明文字符N的过程是这样的:先利用ord()函数将ASCII字符P转换为对应的ASCII数值80;再根据密钥2进行倒推,计算出其明文的字符所对应的数值应为78;最后利用chr()函数将数值78转换为对应的ASCII字符N。在这里,ord()和chr()这两个函数的效果正好相反,结合两者,可以实现字符的加密或解密。图1 恺撒密码使用示例图2 字符的解密过程JUN 2018 NO.1263技术与应用tougao1@破解咒语的Python程序示例代码说明ciphertext = 'PQ ETQUU PQ ETQYP'# 将密文内容赋值给变量ciphertextplaintext = ''# 初始化明文变量plaintext为空for letter in ciphertext:# 遍历密文字符串
# 若该字符为大写英文字符,则前移2位解密# 若解密后的字符非大写英文字符, plaintext + letter则需A-Z循环替换,因此后移26位print("咒语:", plaintext)# 逐字连接字符串,最终形成明文# 将破解的明文打印在屏幕上图3 密钥为2的加密示例图4 自定义密钥的加密示例利用Python语言实现破解咒语+26变为-26。此外,利用input()函数,的具体过程如上表所示。想一想,如允许用户自行输入咒语内容,具体的何允许用户自行输入咒语的文字信Python代码如图3所示。息,该如何修改程序?:upper( )方法的作用是将字:isupper( )方法的作用是检测符串中的字母全部转换为大写字母。这字符串中所有的字母是否都为大写,如样,如果用户输入的明文信息包含了大小果所有字符都是大写,则返回True,否则写字母,都会统一转换为大写字母,再返回False。例如,字符A的ASCII码值是65,进行加密。密钥为2,因此在前移2位后,ASCII码值● 自定义密钥加密咒语变成了63,对应的字符是问号“?”,非大使用不同的自定义密钥进行加写字母。此时,可在63的基础上再向后移密,可以提高信息传递过程中的安位26位,对应码值为89(字符Y),即字符全性。如图4所示,新增变量key,提A对应的密文字符为Y。这样,就形成了示用户选择1~25之间的某一个整A~Z的循环。数作为密钥,实现自定义密钥的加● 加密咒语密咒语。本课中,阿派所破解的羊皮卷:如果想让这段程序更加实咒语是指定的密钥2。加密的过程与用,还可以询问用户选择加密还是解密,解密相反,前移2位,变为后移2位,多一次判断,使用户在同一个程序内可即-2。A~Z的循环处理,也是一样,以自由选择加密或解密模式。64中国信息技术教育● 其他加密方法由于恺撒密码的秘钥设置只有1至25,很容易被暴力破解,因此,人们在此基础上进一步改善,主要方法是将密文的字母顺序打乱。例如,圆盘密码就是典型的利用单表置换的加密方法。在两个同心圆盘上,外圈按照A~Z的字母序排列,内圈则按不同的顺序填好字母或数字。转动圆盘就可以找到字母的置换方法,很方便地进行信息的加密与解密。恺撒密码与圆盘密码本质都是一样的,都属于单表置换,即一个明文字母对应的密文字母是确定的,截获者可以分析字母出现的频率进行破译。为了提高密码的破译难度,人们又发明了一种多表置换的密码——维吉尼亚密码。这种加密方法是根据密钥决定用哪一行的密表来进行替换。因此,一个明文字母可以表示为多个密文字母,使得针对单表置换的用词频分析来破译的方法失效,安全性更高一些。古代密码的编码方法还有很多。例如,滚桶密码(又称密码棒),利用字条缠绕木棒的方式,实现字母的位移,收信人要使用相同直径的木棒才能还原真实的信息。随着社会发展,现代密码引入了公钥和私钥的概念,也被称为非对称密码学,与只用一个钥匙的密钥密码学相对应。从恺撒密码,到现代密码学,你可以选择一个有兴趣的加密方法,了解更多加密原理,并利用Python来设计和编写程序,试着模拟一次你的密信传递和破译过程吧!
2023年7月31日发(作者:)
tougao1@技术与应用趣学Python伏魔平天下——恺撒密码王丽丽 上海市世界外国语中学● 情境导入赢了守护使这一关,阿派终于进入了那一方神秘世界。一路上,他披荆斩棘、伏魔降妖平天下,并获得了胜利的奖励——魔法羊皮卷。展开卷宗,只有一行看不懂的咒语,内容是PQ ETQUU PQ ETQYP。阿派照着字母念了几遍,都没有任何动静。忽然,他想到一种古老的加密方法——恺撒密码。于是,他一遍又一遍地尝试,终于发现若将所有字母都往前移2位,就可以形成一句有含义的话:NO CROSS NO CROWN(不经历风雨,怎能见彩虹)。阿派大声朗读出破解的咒语,只见一道金光闪现。这节课的设计灵感来源于恺:撒密码的故事。传说,古罗马皇帝恺撒在打仗时曾经使用“字母错位”的方法来加密军事情报。本课中,教师带领学生理解这种古老而简单的加密方法,并利用Python语言实现加密和解密。● 恺撒密码的加密和解密思想在苏托尼厄斯于公元二世纪写的《恺撒传》中,对恺撒密码作了详细描述,简而言之,就是将真正的信件内容(明文)中的每一个字母用其后的第N个字母代替,转换成一封密信(密文)。这样,即便敌军截住信件,也不知其意。据说,这种加密方法在当时的古罗马颇为流行。这种将字母表中的字母移动一定位置而实现加密的方法,被称为“恺撒移位密码”,简称“恺撒密码”。移动的位数N就是加密和解密的密钥。如图1所示,前文中破解咒语的密钥为2,也就是明文和密文表中的字母相错两位。A加密后所对应的字母就是后两位的字母C,以此类推,且A~Z循环,因此,字母Z的加密字母为B,解码的过程正好与之相反。恺撒密码的编码方法相对简:单,密钥也只有25种,只需逐个试验,很容易破解,但这种加密、解密的思想影响深远。现今的密码术不断发展,大致可分为两种方法,即移位和替换,或者将两者结合产生更复杂的方法,但万变不离其宗,其核心还是算法和密钥。● 破解咒语恺撒密码的算法思想,前面已经解读,此处不再赘述。但在Python中实现咒语的破解(解密),还需要了解字符在计算机中的表示方式。英文字母在计算机中通常采用ASCII码表示,占一个字节。如图2所示,密文中的字符P转换为明文字符N的过程是这样的:先利用ord()函数将ASCII字符P转换为对应的ASCII数值80;再根据密钥2进行倒推,计算出其明文的字符所对应的数值应为78;最后利用chr()函数将数值78转换为对应的ASCII字符N。在这里,ord()和chr()这两个函数的效果正好相反,结合两者,可以实现字符的加密或解密。图1 恺撒密码使用示例图2 字符的解密过程JUN 2018 NO.1263技术与应用tougao1@破解咒语的Python程序示例代码说明ciphertext = 'PQ ETQUU PQ ETQYP'# 将密文内容赋值给变量ciphertextplaintext = ''# 初始化明文变量plaintext为空for letter in ciphertext:# 遍历密文字符串
# 若该字符为大写英文字符,则前移2位解密# 若解密后的字符非大写英文字符, plaintext + letter则需A-Z循环替换,因此后移26位print("咒语:", plaintext)# 逐字连接字符串,最终形成明文# 将破解的明文打印在屏幕上图3 密钥为2的加密示例图4 自定义密钥的加密示例利用Python语言实现破解咒语+26变为-26。此外,利用input()函数,的具体过程如上表所示。想一想,如允许用户自行输入咒语内容,具体的何允许用户自行输入咒语的文字信Python代码如图3所示。息,该如何修改程序?:upper( )方法的作用是将字:isupper( )方法的作用是检测符串中的字母全部转换为大写字母。这字符串中所有的字母是否都为大写,如样,如果用户输入的明文信息包含了大小果所有字符都是大写,则返回True,否则写字母,都会统一转换为大写字母,再返回False。例如,字符A的ASCII码值是65,进行加密。密钥为2,因此在前移2位后,ASCII码值● 自定义密钥加密咒语变成了63,对应的字符是问号“?”,非大使用不同的自定义密钥进行加写字母。此时,可在63的基础上再向后移密,可以提高信息传递过程中的安位26位,对应码值为89(字符Y),即字符全性。如图4所示,新增变量key,提A对应的密文字符为Y。这样,就形成了示用户选择1~25之间的某一个整A~Z的循环。数作为密钥,实现自定义密钥的加● 加密咒语密咒语。本课中,阿派所破解的羊皮卷:如果想让这段程序更加实咒语是指定的密钥2。加密的过程与用,还可以询问用户选择加密还是解密,解密相反,前移2位,变为后移2位,多一次判断,使用户在同一个程序内可即-2。A~Z的循环处理,也是一样,以自由选择加密或解密模式。64中国信息技术教育● 其他加密方法由于恺撒密码的秘钥设置只有1至25,很容易被暴力破解,因此,人们在此基础上进一步改善,主要方法是将密文的字母顺序打乱。例如,圆盘密码就是典型的利用单表置换的加密方法。在两个同心圆盘上,外圈按照A~Z的字母序排列,内圈则按不同的顺序填好字母或数字。转动圆盘就可以找到字母的置换方法,很方便地进行信息的加密与解密。恺撒密码与圆盘密码本质都是一样的,都属于单表置换,即一个明文字母对应的密文字母是确定的,截获者可以分析字母出现的频率进行破译。为了提高密码的破译难度,人们又发明了一种多表置换的密码——维吉尼亚密码。这种加密方法是根据密钥决定用哪一行的密表来进行替换。因此,一个明文字母可以表示为多个密文字母,使得针对单表置换的用词频分析来破译的方法失效,安全性更高一些。古代密码的编码方法还有很多。例如,滚桶密码(又称密码棒),利用字条缠绕木棒的方式,实现字母的位移,收信人要使用相同直径的木棒才能还原真实的信息。随着社会发展,现代密码引入了公钥和私钥的概念,也被称为非对称密码学,与只用一个钥匙的密钥密码学相对应。从恺撒密码,到现代密码学,你可以选择一个有兴趣的加密方法,了解更多加密原理,并利用Python来设计和编写程序,试着模拟一次你的密信传递和破译过程吧!
发布评论