基于Python实现凯撒密码的加解密

一、凯撒密码原理

  在密码学中,恺撒密码(英语: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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容