logo资料库

网络信息安全 实验报告 AES加密解密.pdf

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
实验二:AES 加密解密 一、 实验要求 做实验并写实验报告。修改例程 cryptoDemo.cpp 为 encfile.cpp :从命令行接受 3 个字 符串类型的参数:参数 1,参数 2,参数 3。参数 1=encrypt 表示加密,参数 2=decrypt 表 示解密;参数 2 为待加密 、解密的文件名;参数 3 为密码。 二、 实验准备 2.1 实验环境 VMware Workstation Pro、Ubuntu14.04、gcc 2.2 安装 openssl 库,使用命令 sudo apt-get install libssl-dev 三、 实验过程 3.1 编译 cryptoDemo.cpp 先将 #include “aes.h”改为 #include ,然后在终端输入 gcc -o cryptoDemo cryptoDemo.cpp –lcrypto,然后在终端输入 ./cryptoDemo 结果如下: 3.2 按要求改写 Demo
修改部分:拆解原 Demo,加上文件读写功能,代码如下: // cryptoDemo.cpp : Defines the entry point for the console application. // Windows: cl cryptoDemo.cpp // Linux: gcc -o cryptoDemo cryptoDemo.cpp -lcrypto // Linux: gcc -o encfile encfile.cpp -lcrypto #include #include #include #include #include #pragma comment(lib,"libeay32.lib") void encrypt(char *filename, char passwd[], int pwdLen) //加密 { char inString[1024]; char enFile[1024]; //加密后的文件名 strcpy(enFile,filename); strcat(enFile,"_encrypt"); //加密后的文件名 //文件读取 FILE *fp=fopen(filename,"r"); if(fp==NULL) { printf("文件%s 打开错误\n",filename); fclose(fp); return; } char c=fgetc(fp); //从 fp 所指文件的当前指针位置读取一个字符 int i=0; while(c!=EOF) { inString[i++]=c; c=fgetc(fp); } inString[i]=0; //输入结束符 fclose(fp); //加密(demo 部分代码) int j, len, nLoop, nRes; char enString[1024]; unsigned char buf[16]; unsigned char buf2[16]; unsigned char aes_keybuf[32]; AES_KEY aeskey; int inLen=strlen(inString); //原始字符串的长度 // 准备 32 字节(256 位)的 AES 密码字节 memset(aes_keybuf,0x90,32);
if(pwdLen<32){ len=pwdLen; } else { len=32;} for(i=0;i0){ memset(buf,0,16); for(j=0;j
{ printf("文件%s 打开错误\n",filename); fclose(fp); return; } char c=fgetc(fp); //从 fp 所指文件的当前指针位置读取一个字符 int i=0; while(c!=EOF) { enString[i++]=c; c=fgetc(fp); } enString[i]=0; //输入结束符 fclose(fp); //解密 int j, len, nLoop, nRes; char deString[1024]; //解密后的字符串 unsigned char buf[16]; unsigned char buf2[16]; unsigned char aes_keybuf[32]; AES_KEY aeskey; // 准备 32 字节(256 位)的 AES 密码字节 memset(aes_keybuf,0x90,32); if(pwdLen<32){ len=pwdLen; } else { len=32;} for(i=0;i0){ memset(buf,0,16); for(j=0;j<16;j++) buf[j]=enString[i*16+j]; AES_decrypt(buf,buf2,&aeskey); for(j=0;j<16;j++) deString[i*16+j]=buf2[j]; //puts("decrypt"); } deString[i*16+nRes]=0;
//写入文件 FILE *fpw=fopen(deFile,"w"); if(fpw==NULL) { printf("不能写入%s.\n",deFile); fclose(fpw); return; } int len1=strlen(deString); for(i=0;i
3.5 执行加密 加密后的文件为 testfile_encrypt,密文内容为: 3.6 执行解密 解密后的文件为 test_encrypt_decrypt,内容为: 3.7 结论 可以看出,加密前后的内容是一致的。 四、 实验总结 通过本次实验,对 aes 加密解密有了简单的了解,并通过实验实现了加密解密的过程。 同时熟悉了下 C 语言。
分享到:
收藏