当前位置:   article > 正文

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/990890
推荐阅读
相关标签
  

闽ICP备14008679号