山东大学软件学院信息安全导论课程实验报告学号:201300301385姓名:周强班级:2013级八班实验题目:RC4流加密算法实验实验学时:日期:实验目的:(1)了解对称算法的基本工作流程。(2)掌握对称算法的使用方法。硬件环境:软件环境:DEEPIN操作系统Windows7操作系统PythonshellVS2008Openssl库实验步骤与内容:一、了解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。$tarzxfopenssl-0.9.8c.tar.gz在Linux中的编译和安装步骤较简单:$./config$make$maketest$makeinstall在Linux下,头文件、库文件、工具都已被安装放到了合适的位置。库文件是.a或.so格式。一般Linux发行版中默认已经安装了OpenSSL的运行和开发环境,因此可以不必另外安装。使用OpenSSL.exe(Linux中可执行文件名是openssl)可以做很多工作,是一个很好的测试或调试工具。显示版本和编译参数:opensslversion-a查看支持的子命令:openssl?SSL密码组合列表:opensslciphers测试所有算法速度:opensslspeed测试RSA速度:opensslspeedrsa测试DES速度:opensslspeeddes产生RSA密钥对:opensslgenrsa-out1.key1024取出RSA公钥:opensslrsa-in1.key-pubout-out1.pubkeyRC4加密文件:opensslenc-e-rc4-in1.key-out1.key.encRC4解密文件:opensslenc-d-rc4-in1.key.enc-out1.key.2计算文件的MD5值:opensslmd51.key计算文件的SHA1值:opensslsha11.key三、使用openssl进行AES256位密钥cbc模式对称加密使用OpenSSL对文件进行加密,其实就跟对消息进行加密一样简单。我们使用-in选项,后面跟以我们想进行加密的实际文件,并使用-out选项,这会指令OpenSSL将经过加密的文件存储到某个名称的文件中:$opensslenc-aes-256-cbc-in××××××-out×××××××1、加密前需要输入口令密钥2、加密前文件3、加密后文件4、解密5、解密后文件四、Python实现RC4加密importsys,os,hashlib,time,base64classrc4:def__init__(self,public_key=None,ckey_lenth=16):self.ckey_lenth=ckey_lenthself.public_key=public_keyor'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=''defencode(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]+stringself.result=''self.docrypt(string)returnself.keyc+base64.b64encode(self.result)defdecode(self,string):self.keyc=string[0:self.ckey_lenth]string=base64.b64decode(string[self.ckey_lenth:])self.result=''self.docrypt(string)result=self.resultif(result[0:10]=='0000000000'orint(result[0:10])-int(time.time())0)andresult[10:26]==hashlib.md5(result[26:]+self.keyb).hexdigest()[0:16]:returnresult[26:]else:returnNonedefdocrypt(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)foriinxrange(255):randkey.append(ord(cryptkey[i%key_lenth]))foriinxrange(255):j=0j=(j+box[i]+randkey[i])%256tmp=box[i]box[i]=box[j]box[j]=tmpforiinxrange(string_lenth):a=j=0a=(a+1)%256j=(j+box[a])%256tmp=box[a]box[a]=box[j]box[j]=tmpself.result+=chr(ord(string[i])^(box[(box[a]+box[j])%256]))测试代码五、利用openssl实现RC4加密解密1、首先进行加密2、RC4解密五、调试老师给的RC4程序编译加密前,加密后的文件!六、RSA非对称加密1、生成公钥和私钥2、抽取的公钥3、执行加密和解密操作加密前加密后解密后七、思考:现在市面上很多号称“高强度文件夹加密”的软件声称“上百G的数据仅需1秒钟完成”,实际上只是将信息隐藏了而已,并没有真正的进行加密,并且这些软件还一定程度上存在着数据丢失的风险。另外360声称使用了AES128位高强度加密,其实只是在filedisk源码基础上改了改,实际加密算法是XOR--!因此,安全性与效率兼得的软件或算法是不存在的,要想具有效率与安全性兼得的效果,可以使用多重加密方式结合的方式。例如使用公钥算法和对称算法结合的方式。结论分析与体会:在对分组加密算法如DES,3DES,AES的学习中我了解了对称加密的五种操作模式CBC,ECB,CFB,OFB,CTR。并且初步了解了分组加密的过程。像DES数据加密标准,它将明文分为两组,密钥分为两组。明文每组经过表置换后与密文一组做异或,将之后的结果输入S盒,与另外一组做异或后作为第一次机密结果。RC4流加密算法是一种不同于分组加密的加密体制。其算法速度可达到DES的十倍。通过合适的伪随机数发生器和长度相当的密钥,流加密算法也是很安全的,因为具有很高的非线性。通过学习我也了解了流加密算法的基本过程。并通过测试实例进行了测试。这次的实验我也是在linux中安装了openssl,体会到了openssl的强大,在之后的实验中我还会继续介绍openssl。
本文标题:信息安全实验报告一
链接地址:https://www.777doc.com/doc-2691809 .html