问题是:
在密码学中,简单的替换密码是一种加密方法,其中短语的每个字母都被不同的字母或字母序列替换。然后,可以通过执行替换的反函数来解密该短语。
在这个问题中,我们将实现一个简单的替换密码,其中字符(字母,数字或特殊符号)被00和99(包括)之间的两位数字替换。例如,可以将字母“a”加密为数字“06”,或者特殊符号“!”可以设置为数字“57”。
我们将使用字典来存储每个字符与其相应的加密形式之间的映射。也就是说,字典的密钥将是常规字符(字母,数字和特殊符号),值将是字符的加密形式(和 之间的两位数数字)。00
99
您的代码应针对此问题实现以下五个函数。
名称:创建密码字典
参数:无参数。
返回值:一种字典,其中每个键都是一个常规字符,每个值都是介于 00 和 99 之间的随机两位数(包括 00 和 99)。
它应该做什么:在提供给您的代码的顶部,定义了字符串。此字符串包含应成为字典中键的所有字母、数字和特殊符号。您必须遍历此字符串,并在每个字符之间和为每个字符生成一个两位数的随机数。两位数将是字典中的值;每个字符(键)将有一个两位数(值)。LETTERS
00
99
请注意,数字 0, 1, 2, ..., 9 不应该是值;相反,它们应该是数字00,01,02,...,09。此外,请注意,每个字符都应具有唯一的随机数。也就是说,如果字符“a”映射到值“57”,则其他任何字符都不应映射到值“57”。(您需要使用某种循环来继续生成新的随机数,直到找到唯一的随机数。
名称:加密
参数:字符串 。s
返回值:字符串 s 的加密版本。原始字符串 s 的每个字符都应替换为密码字典中相应的两位数字。
名称: 解密
参数:字符串 。返回值:字符串 s 的解密版本。加密字符串 s 的每个两位数应替换为密码字典中的相应字符。请注意,在这里,我们有加密的形式(字典中的值),并且正在寻找常规字符(字典中的密钥7)。为此,我们需要使用类中看到的反向查找函数。此功能已在随附的 encryption.py 文件中提供给您。s
我们将编写另外两个函数来增加加密的强度。一个函数将多次重复加密字符串。另一个函数将尝试解密字符串,而不知道它被加密的次数(从而破坏了更强的加密点)。
名称:多次加密
参数:一个字符串和整数值,表示加密字符串的次数。s
n
返回值:字符串加密时间。也就是说,字符串将首次加密,每个字符转换为其两位数表示形式。然后,加密的字符串将被重新加密,每个数字都变成其两位数的表示形式。(因此,每次加密后,字符串的长度将加倍。(提示:您必须多次调用加密函数。s
n
名称:多次解密
参数:字符串 。s
返回值:字符串 的解密版本 。由于我们不知道解密字符串的次数,因此我们将继续对字符串调用decrypt,直到字符串包含英语中的常用单词。encryption.py 文件中为您提供了常用词(常用词)的列表。如果在解密一次后,字符串包含此列表中的任何单词,则应立即返回解密的字符串。否则,请继续对字符串调用 decrypt,直到它包含其中一个常用词。(我们假设完全解密的字符串将始终包含至少一个常用词。s
最后,在文件 encryption.py 结束时,您会注意到已经为您编写的一些代码。此代码要求用户输入一个字符串,然后调用各种函数并打印它们返回的内容(以生成下面看到的示例)。您必须更改此代码,以便如果用户输入的字符串不包含“常用词”列表中的任何单词,则程序应输出“无效输入”,而不是执行其余代码。否则,程序应继续执行其余代码。(提示:回想一下作业 1 和 if/else 分支。
潇潇雨雨
达令说
相关分类