美文网首页
基于Python实现凯撒密码的加解密

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

作者: 海鑫_S | 来源:发表于2018-11-11 18:36 被阅读0次

    一、凯撒密码原理

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

    相关文章

      网友评论

          本文标题:基于Python实现凯撒密码的加解密

          本文链接:https://www.haomeiwen.com/subject/nkxaxqtx.html