• 基于C++的文件加密解密(密码学课程设计)


    资源下载地址:https://download.csdn.net/download/sheziqiong/86882054
    资源下载地址:https://download.csdn.net/download/sheziqiong/86882054

    密码学课程设计

    程序完成课程设计所有必做与选做的要求,包含的函数如下:

    • BlockType SBox_Encode(BlockType x) S 盒置换

    • BlockType SBox_Decode(BlockType x) S 盒逆变换

    • BlockType PBox_Encode(BlockType x) P 盒置换

    • BlockType PBox_Decode(BlockType x) P 盒逆变换void

    • OutPut_Bin(BlockType p)输出显示一个 16 位二进制数 void

    • OutPut_Key(KeyType key)输出显示一个密钥 void

    • BlockEncryption(BlockType PlainText,BlockType

    • &CipherText,KeyType Key)

    分组加密函数

    void ->	BlockDecryption(BlockType ->	&PlainText,BlockType 
    CipherText,KeyType Key) 
    
    • 1
    • 2

    分组解密函数

    void Key_Engine()生成指定密钥 void Key_Random()随机生成密钥

    int FileEncryption(char *PlainFile,char *CipherFile,KeyType Key) 
    
    • 1

    文件加密

    int FileDecryption(char *PlainFile,char *CipherFile,KeyType Key) 
    
    • 1

    文件解密

    unsigned long EncryptionTime(unsigned long Times) 
    
    • 1

    加密函数的运行速度

    BlockType LinearCryptanalysis(unsigned long T,BlockType Text[][2]) 
    
    • 1

    线性密码分析

    BlockType DiffCryptanalysis(unsigned long T,BlockType Text[][4]) 
    
    • 1

    差分密码分析

    void TestBlockEncrypt()测试分组加密与解密 void TestFileEncrypt()测试文件加密与解密 void TestEncryptionTime()测试运行速度 void TestLinearCryptanalysis()测试线性密码分析 void TestDiffCryptanalysis()测试差分密码分析 void TestLinearSucceedTimes()测试线性分析函数成功时明密文对数 void TestDiffSucceedTimes()测试差分分析函数成功时明密文对数 void Wait()暂停,按回车键继续 测试程序只需打开生成的可执行文件,按提示操作即可。运行截图如下:

    在这里插入图片描述

    任意输入一个小于 65536 的非负整数,即可进行 16 位数据分组加密与解密的演示。

    在这里插入图片描述

    测试文件加密与解密:请确保输入的“目录\文件名”正确,否则会返回“文件不存在,失败”。对文件加密之后会在原目录中生成加密文件“文件名.cip”,继续则会自动进行解密,重新在原目录下生成新的原文件,建议文件加密之后将原文件移至其他地方,再进行解密操作,方能见到文件解密效果。

    文件加密对任意文件格式有效。

    接下去的步骤是测试平均加密时间,采用 1000 个随机密钥分别对 0—65535 的每个数进行加密,给出平均一个密钥所用的加密时间。

    在这里插入图片描述

    下面会测试线性密码分析与差分密码分析,随机产生的明密文对分别为 8000 与 100 对。此过程可能成功或失败,猜想失败可能与随机明文的产生有关。

    在这里插入图片描述

    最后进行密码分析成功时的明密文对数量的测试。

    附带程序:

    随作业附带的可执行文件FileEncryption.exe可方便地进行文件的加密与解密。示例如下:

    在这里插入图片描述

    如图,可自行输入加密所取密钥,也可使用默认密钥。只要对文件解密时所用密钥与文件加密时相同,即可还原原文件,若解密时采用密钥与加密时不同,则可能生成另一个乱码文件或产生错误。

    效率

    为了提高加密与解密的效率,S 盒与 P 盒以及它们的逆变换直接采用数组存储,使用时采用查表的方式直接查询获得。

    移位运算中,尽量将一个数对同一个方向的移位按照从近到远的方式进行,减少重复平移的位数。

    测试平均加密时间

    在这里插入图片描述

    如上图所示,总共对 10000 个随机密钥进行了测试,得到的平均加密时间为 80ms。测试平台如下:

    软件平台:操作系统 WIN7 32 位,编译器 VC6.0

    硬件平台:处理器 Intel® Core™2 Duo CPU T6570 2.1GHz 内存 4GB

    密码分析成功时的明密文对数量

    采用 6000—20000 对随机明密文分别进行线性密码分析,明密文对数量每增加 200 测试一次并输出结果“成功”或“失败”。

    结果如下:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    采用 50—300 对随机选择明密文分别进行差分密码分析,明密文对数量每增加 10 测试一次并输出结果“成功”或“失败”。

    结果如下:

    在这里插入图片描述

    由结果可发现,对于线性密码分析与差分密码分析,随着明密文对数量的增加,分析成功的概率都会明显增大,但仍然有一定的可能出现攻击失败的情况,这也许与随机明密文对的产生有关,也可能是我在程序编制过程中没有意识到的错误。

    在明密文对取到一定大的值时,线性分析为 7200,差分分析为180,可近似认为密码分析一定会成功,因为出现失败的概率已经很小。

    的可能出现攻击失败的情况,这也许与随机明密文对的产生有关,也可能是我在程序编制过程中没有意识到的错误。

    在明密文对取到一定大的值时,线性分析为 7200,差分分析为180,可近似认为密码分析一定会成功,因为出现失败的概率已经很小。
    资源下载地址:https://download.csdn.net/download/sheziqiong/86882054
    资源下载地址:https://download.csdn.net/download/sheziqiong/86882054

  • 相关阅读:
    POJ1064Cable master题解
    linux03
    切换为root用户后,conda:未找到命令
    ELFK(filebeat)部署
    2022软件测试工程师涨薪攻略,3年如何达到30K
    H5 富文本快捷输入
    DevEco中被忽略的实用功能
    进阶JAVA篇-如何理解作为参数使用的匿名内部类与 Arrays 类的常用API(九)
    【IoT】从马斯克造火箭到产品开发,快速失败很重要
    gin 框架出现runtime error: index out of range [0] with length 0
  • 原文地址:https://blog.csdn.net/newlw/article/details/127639791