一、凯撒密码原理
在密码学中,恺撒密码(英语:Caesar cipher),是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
凯撒密码示意图
如上图所示,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推,X被替换为A,Y被替换为B,Z被替换为C。
二、基于Python实现凯撒密码
1. 凯撒密码加解密流程图
凯撒密码加解密流程图2. 项目结构
CaesarCipher.py 文件为程序主文件,ciphertext.txt 文件用来存放需要解密的内容,plaintext.txt 文件用来存放需要加密的内容,word_library.txt 文件为生成的一个本地词典,用来对解密的结果进行正确率判断,选出最正确的结果。
项目结构
3. 程序主逻辑
3.1 程序执行菜单
程序执行菜单3.2 程序中主要函数
下面为程序中定义的主要函数,具体代码请参见源码。
def con_input()
"""循环输入函数"""
def input_con()
"""在输入时实现循环输入,空行停止"""
def write_txt(text)
"""运行结果保存文件函数"""
def letter_off()
"""固定值偏移量函数"""
def letter_off_ran()
"""随机值偏移量函数"""
def save_return(text)
"""保存选择及返回函数"""
def encryption(text, offset)
"""字符串形内容加密函数"""
def encryption_list(text, offset)
"""列表形内容加密函数"""
def decryption(text, decry_type, *args)
"""字符串形内容解密函数"""
def decryption_list(text, decry_type, *args)
"""列表形内容解密函数"""
def menu_3level()
"""解密方式菜单函数"""
4. 程序改进
在运行长文本或者大文件时,程序运行时间比较久,对此进行优化。
Python 中 list 的源码
list方法的时间复杂度
Python 中 list 数据类型实现是一个动态数组,其存储结构采用的是线性表中的顺序存储,其查询复杂度为O(n),随着规模增大耗时间越来越高。
Python 中 set 的源码
set方法的时间复杂度
Python 中 set数据类型与dict数据类型类似,其存储结构都采用的是散列表(hash表),保存hash值作为key,在最优情况下查询复杂度为O(1)。
将原来在list中循环匹配的方法,改为在set中循环匹配或者使用set的求交集功能。对同一内容进行解密,使用 list 时用时为 1943.83 豪秒,而使用 set 后用时为 81.81 毫秒。
三、基于Python实现凯撒密码加解密的源码
已将源码上传至GitHub Python 凯撒密码加解密 源码
Python 版本 : 3.7
IDE : Pycharm
网友评论