信息安全技术实验报告-基于openssl库的对称密码实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息安全技术实验报告

姓名:xxx

学号:xxxxxxxxx

专业:xxxxx

日期:xxxxxx

Lab2: 基于openssl库的对称密码实验

一、实验目的

让学生熟悉加密的概念,熟悉和了解加密算法(cipher)、加密模式(encryption mode)、

以及初始向量(IV)的定义与作用。

二、实验环境

1.虚拟机VirtualBox

2.Ubuntu-16.04.6

3.bless十六进制编辑器

三、实验内容

3.1 使用openssl enc 命令来加密/解密一个文件。

命令基本格式如下:

$ openssl enc -e ciphertype -in plain.txt -out cipher.bin -K 00112233445566778899aabbccddeeff

-iv 0102030405060708

了解openssl命令的基本格式中各个参数和选项的含义,然后将上述命令代码中的ciphertype 替换成指定的加密类型,比如-aes-128-cbc, -aes-128-cfb, -bf-cbc 等,也可以替换命令实例中的参数K和iv。

实验报告中相关问题的回答:

1.配置好实验环境,查看openssl版本。

图3.1.1 查看openssl版本

2. 创建一个文本文件,并任意输入内容,保存后作为输入文件,执行上面的命令行中的加密命令,然后使用对应的解密命令解密加密文件,并对比解密后的输出和原始输入文件是否相同。

创建一个文本文件plain.txt,并输入内容“I love you”,作为输入文件。

这里使用的加密类型为-aes-128-cbc 。

加密操作如下:

$ openssl enc -e -aes-128-cbc -in plain.txt -out cipher.bin -K 00112233445566778899aabbccddeeff

-iv 0102030405060708

图3.1.2-1 文本加密

解密操作如下:

$ openssl enc -d -aes-128-cbc -in cipher.bin -out dcipher.txt

-K 00112233445566778899aabbccddeeff -iv 0102030405060708

图3.1.2-2 文本解密

结论:解密后的输出和原始输入文件相同。

3. 不同工作方式对是否会对明文进行填充?

编辑一个文档word.odt,并加密。

1)第一种,使用的加密类型为-aes-128-cbc 具体操作如下:

$ openssl enc -e -aes-128-cfb -in word.odt -out wordcfb.bin -K 0123456 -iv 789

图3.1.3-1 第一种加密

结论:加密后生成的文档大小和原来的明文大小一致。

2)第二种,使用的加密类型为-aes-128-cbc 具体操作如下:

$ openssl enc -e -aes-128-cbc -in word.odt -out wordcbc.bin -K 0123456 -iv 789

图3.1.3-2 第二种加密

结论:加密后生成的文档大小和原来的明文大小一致。

3)第三种,使用的加密类型为-bf-cbc 具体操作如下:

$ openssl enc -e -bf-cbc -in word.odt -out wordbf.bin -K 0123456 -iv 789

图3.1.3-3 第三种加密

结论:加密后生成的文档大小和原来的明文大小一致。

4. ecb和cbc两个工作方式对bmp图片的加密效果比较。

以picture.bmp图片作为输入文件,分别采用aes-128-ecb方式和aes-128-cbc方式加密并输出为图像文件。

具体操作如下:

$ openssl enc -e -aes-128-ecb -in picture.bmp -out pictureecb.bmp -K 0123456

$ openssl enc -e -aes-128-cbc -in picture.bmp -out picturecbc.bmp -K 0123456 -iv 789

图3.1.4-1 两种加密过程

因加密后的文件不能正常显示为图像,所以使用bless打开两个图像文件,修改其前缀为标准的图像文件前缀:

图3.1.4-2 用bless修改加密后的文件1

图3.1.4-3 用bless修改加密后的文件2

修改后的两个图像及原图片对比如下:

图3.1.4-4 加密后的图片同原图的对比

简要描述ecb和cbc工作方式:

ecb是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的密钥单独加密,解密同理。

cbc模式对于每个待加密的密码块在加密前会先与前一个密码块的密文异或然后再用加密

器加密。第一个明文块与一个叫初始化向量的数据块异或。

结论:

由图可以看出,cbc方式加密得到的图片跟原图差距很大,原图的线条及颜色都被隐藏得很好:而ecb方式加密得到的图片还保留了原图的线条形状,只是颜色发生了改变。

3.2 使用Openssl 加密库进行编程

在本实验中,将学习如何使用openssl 的加密库来加密/解密信息,openssl 提供一个叫作EVP 的高级接口,已封装底层函数,尽管openssl 也为每一个单独的加密算法提供接口,但使用evp 会更方便一些。

实验具体内容:

已知明文和密文,如下所示。并且已知加密方法为aes-128-cbc,IV 全由0 组成,以及key 是字典word.txt (实验提供)中的一个英文单词,其长度小于16 个字母,由于该单词小于16 个字母128bits所以在其后追加了空格字符对应(0x20)以达到128bit 的长度。

实验报告中的问题:

1. 写一个穷举攻击的程序找到加密密钥key,解密密文,使得解密的结果与明文相同。

明文(21 个字符): This is a top secret.

密文(十六进制形式): 8d20 e505 6a8d 24d0 462c e74e 4904 c1b5 13e1 0d1d f4a2 ef2a d454 0fae 1ca0 aaf9

1)这里使用的是实验提供的key.c,编译key.c:

$ gcc -I /usr/include/openssl -L /usr/lib/ssl -o enc key.c -lcrypto -ldl

图3.2.1-1 key.c的编译

2)给程序key.c中每条语句添加注释

#include //调用openssl库头文件

#include //调用openssl库头文件

#include //调用openssl库头文件

#include //调用字符串头文件

#include //调用标准输入输出函数头文件

#include //调用standard library标准库头文件

#define True 1//定义正确返回1

#define False 0//定义错误返回0

void handleErrors(void)//过滤异常

{

ERR_print_errors_fp(stderr);//将错误信息打印到FILE中

abort();//终止

相关文档
最新文档