APP下载

趣味数学

2021-07-07

电脑报 2021年17期
关键词:明文字符棋盘

人们为了不让信息泄露,会对信息进行加密处理,将正常的、可识别的信息转化为无法识别的信息。密码已经经历了三个阶段:古典密码、近代密码、现代密码。在大学的课程中就专门有一门密码学。

今天介绍的这种加密技术叫棋盘密码(Polybius方表),这种密码据说出现在公元2世纪由希腊人波利比乌斯发明。在5×5的方格中放入26个字母,由于字母数量超出方格格数,所以将字母I和J存放在同一個格子中(表1)。

加密和解密:两个数字一组,每组数字的第一个数字对应行坐标,第二个数字对应列坐标。例如明文是:fly with me,加密的结果是21 31 54 52 24 44 23 32 15一串数字。这种棋盘密码只能对26个英文字母进行加密且不区分大小写,如果想对一些符号或者数字加密的话,就需要更大的棋盘。棋盘密码在当时绝对算得上一个伟大的发明,看似简单却是后世无数种密码的雏形,比如19世纪由英国科学家查尔斯发明的“普莱菲斯密码”。那么我们如何利用Scratch编程来完成用棋盘密码对明文的加密呢?

由于棋盘密码的变化过程是固定的,所以用列表“原文字符清单”来存放原文字符(字母A-Z),用列表“棋盘位置清单”存储这个字母加密后的数字组,保证两个列表中的内容一一对应,如a=11,b=12,注意i=24且j=24(图1)。

为了记录两个文本:未加密前的明文文本和加密后的密文文本,接下来要创建几个变量:“原文”“密文”和“位置”(记录每个字符所在原文列表中的编号)。设定一个“计数器”,用于循环判断原文中每个字符的变化(图2)。

将原文设置成用户输入的文本,并重复执行直到计数器超出原文的字符数,在循环的过程中判断输入的每个字符是否原文列表中的内容,即判断是否为英文字母,如果在“原文字符清单”列表中,那么记录下它的编号,到“棋盘位置清单”列表中寻找对应项进行加密,否则的话不发生变化输出原本的字符。代码编完后我们输入明文测试,看看得到的密文,是否和预想的结果一致。

棋盘密码和之前讲过的恺撒密码都是属于古典密码,只需要用到列表或字符串的,基本操作便可以完成了,以后我们会找一些更复杂的密码。

猜你喜欢

明文字符棋盘
Python实现图片转字符画
正则表达式快速入门
图片轻松变身ASCⅡ艺术画
奇怪的处罚
奇怪的处罚
棋盘人生
奇怪的处罚
视频监视系统中字符叠加技术的应用
棋盘里的天文数字