信息安全实验LibTomCrypt 实验1.docx
- 文档编号:2459005
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:21
- 大小:870.25KB
信息安全实验LibTomCrypt 实验1.docx
《信息安全实验LibTomCrypt 实验1.docx》由会员分享,可在线阅读,更多相关《信息安全实验LibTomCrypt 实验1.docx(21页珍藏版)》请在冰豆网上搜索。
信息安全实验LibTomCrypt实验1
山东大学软件学院
信息安全课程实验报告
学号:
2
姓名:
赵
班级:
实验题目:
利用LibTomCrypt库实验文件的加密和解密
实验学时:
4
实验日期:
2016/11/10-2016/12/9
硬件环境:
LenovoG50-70500g+240g硬盘
软件环境:
VisualStudio2013
实验步骤与内容:
一、知识准备
首先我们得到了LibTomCrypt库,另外还有LibTomMath库,使用visualstudio2013。
那么我们要学会怎么使用这两个库:
那么首先是在visualstudio2013中打开libTomMath库,直接编译(build),生成项目,然后会在Debug文件里面找到libtommath.lib文件,然后将这个文件复制到LibTomCrypt库里面的header里面,
然后从VS2013直接打开LibTomCrypt库,配置一下库和h头文件的路径,然后直接编译,生成项目。
大概向下面那样:
然后我们新建一个工程,并且将以libtomcrypt开头的.h文件,全部复制到我们新建的引用库的include文件夹里面里面可以开始在我们工程Crypt里面引用我们的.lib文件。
同样需要给这个Crypt工程配置库路径和头文件路径,如下面:
另外还需要添加一个.lib的名字
然后我们就可以编写代码了。
首先我们要对LibTomCrypt库有个理解,然后我们需要引入tomcrypt.h的库,然后我们需要了解有多少加解密方法:
在这里我们用到了AESDESBlowFish三种方法、
然后我们还要看一下有多少个加解密模式。
密码算法的工作模式就是怎样使用密码算法来达到一定的目的,比如怎样加密一个文件。
工作模式有很多种,仅用于加密的,用来构造HASH函数的,仅用于生成消息验证码的,用于伪随机数生成的,既能加密又能同时生成验证码的,专门针对磁盘加密。
然后,我们用到了四个加密模式:
CBC,CFB,OFB,CTR
-
二、代码解析
然后,我们就拿CBC模式进行解析一下,首先我们需要注册一下加密方法:
在注册完加密方法之后,我们需要利用intfind_cipher(constchar*name)
获取已注册的密码算法索引值
下面我们就可以根据选择的加密方法和工作模式进行初始化:
代码如下:
然后我们根据选择的加密还是解密的模式进行相对应的加解密方法:
首先是加密:
我们需要读取明文并且需要创建密文,所以在开始之前我们已经声明了三个文件流的指针变量,plaintext,cryptText,decryptText.
并且在这里我们需要用到C语言的fopen方法,在读文件的时候,我们要以二进制文件的形式来读取,这样会避免一些由于读取文件时候而出现的不必要的错误:
加密流程:
在这里我们首先使用memset这个函数对读取的明文块长和加密后的密文块进行初始化吧
然后使用fread方法每次读取固定大小的块长,
然后使用cbc_encrypt方法进行加密:
和fewrite方法将加密好的密文pt写入到文件流里面:
直到文件读取结束,加密完成。
解密流程:
同样我们需要读取密文和创建解密文件:
和加密流程相对应的是我们用到了cbc_decrypt这个解密方法,
并且将解密好的明文写入到文件里面:
直到密文文件读取结束,解密完成。
三、运行测试:
我们选择加密方法和加密模式:
然后选择明文-a.txt,再选择密文b.txt,输入IV初始向量和key密钥。
然后我们看一下明文和密文:
然后我们进行解密:
最后我们看一下解密之后的明文:
如图所示,我们看到是加解密成功!
四、代码附录
1.//Crypt.cpp:
Definestheentrypointfortheconsoleapplication.
2.//
3.#include"stdafx.h"
4.#include"tomcrypt.h"
5.#include
6.//注册方法
7.intregis(intMethod){
8.
9.if(Method==1){
10.if(-1==register_cipher(&aes_desc)){
11.printf(("failedtoregister_cipher()"));
12.return-1;
13.}
14.}
15.elseif(Method==2){
16.if(-1==register_cipher(&blowfish_desc)){
17.printf(("failedtoregister_cipher()"));
18.return-1;
19.}
20.}
21.elseif(Method==3){
22.if(-1==register_cipher(&des_desc)){
23.printf(("failedtoregister_cipher()"));
24.return-1;
25.}
26.}
27.return1;
28.}
29.
30.char*reType(inttype){
31.if(type==1){
32.return"加密";
33.}else{
34.return"解密";
35.}
36.}
37.
38.int_tmain(intargc,_TCHAR*argv[])
39.{
40.printf("欢迎使用zs加解密程序~~");
41.//定义一些变量
42.inttype=1;//1加密2解密
43.intmethod=0,//方法
44.mode=0;//模式
45.charcryptName[20]="",plainName[20]="",decryptName[20]="";//明文的文件名字加密后的文件名字解密后的文件名字
46.char*Method[]={"aes","blowfish","des"};//加密方法的数组
47.char*Mode[]={"CBC","OFB","CFB","CTR"};//加密模式的数组
48.intBlockSize[3]={16,8,8};
49.intkeySize[3]={16,8,7};
50.interror=0;//返回值
51.intcipher=0;//加解密的索引
52.
53.unsignedcharIV[16]={0};
54.FILE*plainText=0,*cryptText=0,*decryptText=0;//文件流
55.//在tomcrypt_cipher.h
56.symmetric_CBCcbc={0};
57.symmetric_OFBofb={0};
58.symmetric_CFBcfb={0};
59.symmetric_CTRctr={0};
60.
61.size_tlen=0;//多长
62.
63.//选择加密或解密
64.printf("\n\n1-加密\n2-解密\n");
65.printf("\n请选择加密或者解密:
");
66.scanf("%d",&type);
67.
68.intMethodLeng=sizeof(Method)/sizeof(Method[0]);
69.intModeLeng=sizeof(Mode)/sizeof(Mode[0]);
70.
71.for(inti=0;i 72.{ 73.printf("\n%d%s",i+1,Method[i]); 74.} 75.//选择加解密的方法 76.printf("%s%s%s","\n\n请在上面选择一种",reType(type),"方法: "); 77.scanf("%d",&method); 78.unsignedcharkey[8]={"123456"}; 79.unsignedcharct[16]=""; 80.unsignedcharpt[16]=""; 81. 82.for(inti=0;i 83.{ 84.printf("\n%d%s",i+1,Mode[i]); 85.} 86. 87.//选择加解密的模式 88.printf("%s%s%s","\n\n请在上面选择一种",reType(type),"模式: "); 89.scanf("%d",&mode); 90. 91.//判断是加密还是解密 92.if(type==1){ 93.printf("\n请输入要加密的文件名: "); 94.scanf("%s",plainName); 95. 96.printf("\n请输入加密之后的文件名: "); 97.scanf("%s",cryptName); 98.} 99.elseif(type==2){ 100.printf("\n请输入要解密的文件名: "); 101.scanf("%s",cryptName); 102. 103.printf("\n请输入解密之后的文件名: "); 104.scanf("%s",decryptName); 105.} 106. 107.//获取密钥和iV向量 108.printf("%s%s%s","\n请输入",reType(type),"的密钥: "); 109.scanf("%s",&key); 110. 111.printf("%s%s%s","\n请输入",reType(type),"的IV向量: "); 112.scanf("%s",&IV); 113. 114.//注册加密方法 115.if(-1==regis(method)){ 116.printf(("failedtoregister_cipher()")); 117.return-1; 118.} 119. 120.//获取加密的方法的下标 121.printf("加密的方法%s",Method[method-1]); 122.cipher=find_cipher(Method[met
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息安全实验LibTomCrypt 实验1 信息 安全 实验 LibTomCrypt