信息安全实验报告一课案

  • 格式:doc
  • 大小:758.00 KB
  • 文档页数:11

山东大学 软件 学院

信息安全导论 课程实验报告

学号:201300301385 姓名: 周强 班级: 2013级八班

实验题目:RC4流加密算法实验

实验学时: 日期:

实验目的:

(1)了解对称算法的基本工作流程。

(2)掌握对称算法的使用方法。

硬件环境:

软件环境:

DEEPIN操作系统

Windows7操作系统

Python shell

VS2008

Openssl库

实验步骤与内容:

一、了解openssl和各种加密算法

(1)什么是openssl工具包

SSL/TLS协议位于TCP协议和应用层协议之间,为传输双方提供认证、加密和完整性保护等安全服务。 SSL作为一个协议框架,通信双方可以选用合适的对称算法、公钥算法、MAC算法等密码算法实现安全服务。

OpenSSL是使用非常广泛的SSL的开源实现。由于其中实现了为SSL所用的各种加密算法,因此OpenSSL也是被广泛使用的加密函数库。

(2)对对称加密算法的基本认识

对称加密使用的加密和解密密钥是相同的,加密过程是解密过程的逆过程。

其基本过程是:

F(K,IN,ENC/DEC)= OUT

其中IN是固定长度的输入分组(DES算法是8字节,AES是16字节),OUT是同样长度的输出分组,密钥K是随机比特串(DES是56比特,AES是128比特)。

对称加密算法又分为流加密和分组加密。 (2)RC4流加密算法

RC4密码算法是流算法,也叫序列算法。流算法是从密钥作为种子产生密钥流,明文比特流和密钥流异或即加密。RC4算法由于算法简洁,速度极快,密钥长度可变,而且也没有填充的麻烦,因此在很多场合值得大力推荐。

RC4由伪随机数生成器和异或运算组成。RC4的密钥长度可变,范围是[1,255]。RC4一个字节一个字节地加解密。给定一个密钥,伪随机数生成器接受密钥并产生一个S盒。S盒用来加密数据,而且在加密过程中S盒会变化。

由于异或运算的对合性,RC4加密解密使用同一套算法。

(3)RC4加密的伪代码

1、初始化长度为256的S盒。第一个for循环将0到255的互不重复的元素装入S盒。第二个for循环根据密钥打乱S盒。

2、下面i,j是两个指针。每收到一个字节,就进行while循环。通过一定的算法((a),(b))定位S盒中的一个元素,并与输入字节异或,得到k。循环中还改变了S盒((c))。如果输入的是明文,输出的就是密文;如果输入的是密文,输出的就是明文。

此算法保证每256次循环中S盒的每个元素至少被交换过一次。

二、在linux下配置openssl

在Linux中可以使用tar解压缩,在Windows中可以使用winzip或winrar。

$tar zxf openssl-0.9.8c.tar.gz

在Linux中的编译和安装步骤较简单:

$./config

$make

$make test

$make install 在Linux下,头文件、库文件、工具都已被安装放到了合适的位置。库文件是.a或.so格式。一般Linux发行版中默认已经安装了OpenSSL的运行和开发环境,因此可以不必另外安装。

使用OpenSSL.exe(Linux中可执行文件名是openssl)可以做很多工作,是一个很好的测试或调试工具。

显示版本和编译参数: >openssl version -a

查看支持的子命令: >openssl ?

SSL密码组合列表: >openssl ciphers

测试所有算法速度: >openssl speed

测试RSA速度: >openssl speed rsa

测试DES速度: >openssl speed des

产生RSA密钥对: >openssl genrsa -out 1.key 1024

取出RSA公钥: >openssl rsa -in 1.key -pubout -out 1.pubkey

RC4加密文件: >openssl enc -e -rc4 -in 1.key -out 1.key.enc

RC4解密文件: >openssl enc -d -rc4 -in 1.key.enc -out 1.key.2

计算文件的MD5值: >openssl md5 < 1.key

计算文件的SHA1值: >openssl sha1 < 1.key

三、使用openssl进行AES 256位密钥 cbc模式对称加密

使用OpenSSL对文件进行加密,其实就跟对消息进行加密一样简单。我们使用-in选项,后面跟以我们想进行加密的实际文件,并使用-out选项,这会指令OpenSSL将经过加密的文件存储到某个名称的文件中:

$ openssl enc -aes-256-cbc -in ×××××× -out ×××××××

1、加密前需要输入口令密钥

2、加密前文件

3、加密后文件 4、解密

5、解密后文件

四、Python实现RC4加密

import sys,os,hashlib,time,base64

class rc4:

def __init__(self,public_key = None,ckey_lenth = 16):

self.ckey_lenth = ckey_lenth

self.public_key = public_key or 'none_public_key'

key = hashlib.md5(self.public_key).hexdigest()

self.keya = hashlib.md5(key[0:16]).hexdigest()

self.keyb = hashlib.md5(key[16:32]).hexdigest()

self.keyc = ''

def encode(self,string):

self.keyc = hashlib.md5(str(time.time())).hexdigest()[32 - self.ckey_lenth:32]

string = '0000000000' + hashlib.md5(string + self.keyb).hexdigest()[0:16] + string

self.result = ''

self.docrypt(string)

return self.keyc + base64.b64encode(self.result)

def decode(self,string):

self.keyc = string[0:self.ckey_lenth]

string = base64.b64decode(string[self.ckey_lenth:])

self.result = ''

self.docrypt(string)

result = self.result if (result[0:10] == '0000000000' or int(result[0:10]) - int(time.time()) > 0) and

result[10:26] == hashlib.md5(result[26:] + self.keyb).hexdigest()[0:16]:

return result[26:]

else:

return None

def docrypt(self,string):

string_lenth = len(string)

result = ''

box = list(range(256))

randkey = []

cryptkey = self.keya + hashlib.md5(self.keya + self.keyc).hexdigest()

key_lenth = len(cryptkey)

for i in xrange(255):

randkey.append(ord(cryptkey[i % key_lenth]))

for i in xrange(255):

j = 0

j = (j + box[i] + randkey[i]) % 256

tmp = box[i]

box[i] = box[j]

box[j] = tmp

for i in xrange(string_lenth):

a = j = 0

a = (a + 1) % 256

j = (j + box[a]) % 256

tmp = box[a]

box[a] = box[j]

box[j] = tmp

self.result += chr(ord(string[i]) ^ (box[(box[a] + box[j]) % 256]))

测试代码

五、利用openssl实现RC4加密解密

1、首先进行加密

2、RC4解密

五、调试老师给的RC4程序

编译

加密前,加密后的文件!

六、 RSA非对称加密

1、生成公钥和私钥