信息安全实验LibTomCrypt 实验1Word格式文档下载.docx

上传人:b****2 文档编号:15375932 上传时间:2022-10-29 格式:DOCX 页数:21 大小:870.25KB
下载 相关 举报
信息安全实验LibTomCrypt 实验1Word格式文档下载.docx_第1页
第1页 / 共21页
信息安全实验LibTomCrypt 实验1Word格式文档下载.docx_第2页
第2页 / 共21页
信息安全实验LibTomCrypt 实验1Word格式文档下载.docx_第3页
第3页 / 共21页
信息安全实验LibTomCrypt 实验1Word格式文档下载.docx_第4页
第4页 / 共21页
信息安全实验LibTomCrypt 实验1Word格式文档下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

信息安全实验LibTomCrypt 实验1Word格式文档下载.docx

《信息安全实验LibTomCrypt 实验1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《信息安全实验LibTomCrypt 实验1Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。

信息安全实验LibTomCrypt 实验1Word格式文档下载.docx

大概向下面那样:

然后我们新建一个工程,并且将以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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1