信息安全实验LibTomCrypt 实验1Word格式文档下载.docx
- 文档编号:15375932
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:21
- 大小:870.25KB
信息安全实验LibTomCrypt 实验1Word格式文档下载.docx
《信息安全实验LibTomCrypt 实验1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《信息安全实验LibTomCrypt 实验1Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
大概向下面那样:
然后我们新建一个工程,并且将以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<
tchar.h>
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(("
18.return-1;
19.}
20.}
21.elseif(Method==3){
22.if(-1==register_cipher(&
des_desc)){
23.printf(("
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<
MethodLeng;
i++)
72.{
73.printf("
\n%d%s"
i+1,Method[i]);
74.}
75.//选择加解密的方法
76.printf("
%s%s%s"
\n\n请在上面选择一种"
reType(type),"
方法:
77.scanf("
method);
78.unsignedcharkey[8]={"
123456"
};
79.unsignedcharct[16]="
80.unsignedcharpt[16]="
81.
82.for(inti=0;
ModeLeng;
83.{
84.printf("
i+1,Mode[i]);
85.}
86.
87.//选择加解密的模式
88.printf("
\n\n请在上面选择一种"
模式:
89.scanf("
mode);
90.
91.//判断是加密还是解密
92.if(type==1){
93.printf("
\n请输入要加密的文件名:
94.scanf("
%s"
plainName);
95.
96.printf("
\n请输入加密之后的文件名:
97.scanf("
cryptName);
98.}
99.elseif(type==2){
100.printf("
\n请输入要解密的文件名:
101.scanf("
102.
103.printf("
\n请输入解密之后的文件名:
104.scanf("
decryptName);
105.}
106.
107.//获取密钥和iV向量
108.printf("
\n请输入"
的密钥:
109.scanf("
key);
110.
111.printf("
的IV向量:
112.scanf("
IV);
113.
114.//注册加密方法
115.if(-1==regis(method)){
116.printf(("
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
![提示](https://static.bdocx.com/images/bang_tan.gif)