ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:196.80KB ,
资源ID:8759277      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8759277.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一种简易的文件安全传输系统的设计与实现.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

一种简易的文件安全传输系统的设计与实现.docx

1、一种简易的文件安全传输系统的设计与实现 江苏大学 JIANGSU UNIVERSITY 课程设计报告 题目:一种简易的文件安全传输系统的设计与实现 学 院: 专业班级: 学 号: 姓 名: 指导老师: 第一部分 课程设计准备1.1课程设计题目.11.2小组成员及分工.11.3课题背景及意义.1第二部分 课程设计过程2.1课题需求分析.4 2.1.1需求分析.42.2概要设计.9 2.2.1 系统功能描述.5 2.2.2 系统功能流程图.62.3具体功能的实现.9 2.3.1预备知识.9 2.3.2算法原理.9.2.4运行结果.11 2.4.1程序界面截图.112.5 待改进问题.12第三部分

2、课程设计体会3.1课程设计心得体会.123.2源程序清单.13第一部分 课程设计准备1.1课程设计题目 题目:一种简易的文件安全传输系统的设计与实现简介:进入信息时代以来,人类的生活发生了翻天覆地的变化。保护网络系统中的数据不受偶然或恶意原因而遭到破坏、更改、泄露,是网络安全的主要内容之一。目前比较实用的方法是对网络中传输的数据进行加密,而数据加密要依赖于成熟的数据加密算法。本文详细论述了对称密码体制和公钥密码体制的典型代表AES(Advanced Encryption Standard )算法和RSA算法的原理和安全性能,并结合这两种算法在windows平台上设计实现了基于网络数据加解密的文

3、件传输系统。详细论述了总体设计思想、功能模块设计。该系统采用python语言编写,软件分为发送端和接收端。发送端的功能主要为提取文件摘要,文件加密,密钥加密,文件发送;接受端的功能是接受文件,解密密钥,解密内容,验证文件完整性。1.2小组成员及分工xx:md5算法计算文件哈希值,实现文件的完整性检查xx:AES算法加解密文件xx:安全协议以及总体功能架构设计1.3课题背景及意义 随着计算机技术的迅速发展,在计算机的应用领域中软件系统的应用越来越广泛。而文件传输是其中重要的一个方面,现在人们对传输系统的性能和功能要求也越来越高,但文件传输系统尤其是在文件传输的安全性上却存在着巨大的缺陷。大多数的

4、安全文件传输系统的安全性体现在了算法的改良或者使用更高级的算法。这个实用程序的要求是安全的主机之间传输大文件,我们需要一个强大的密码加密数据发送机制。为了防止密钥泄露问题,我们通常使用公钥加密加密数据。但是,权衡使用公钥加密大文件是加密和解密数据的性能瓶颈。所以很明显,我们需要一个对称密钥加密这些大文件传输机制。解决这两个性能问题和密钥分发问题,我用AES(高级加密标准)256位加密加密文件和RSA公钥加密对称的AES加密密钥。第二部分 课程设计过程2.1课题需求分析 2.1.1需求分析 随着信息技术的迅速发展与大规模的普及应用,社会已经进入一个信息时代,网络通信成为至关重要的环节,给政府和企

5、业带来了极大的劳动效率的提高。行业信息化建设多年来,许多公司的核心资产和数据都已经电子化,更具体地说,就是传统的技术、档案、资料都已经变成电子数据的形式保存并传递。随着这些硬件、软件、系统的广泛应用的同时也给网络安全管理人员增加很多问题,其中,最重要的就是文件传输中的信息安全问题。信息安全也是网络安全中最重要的一部分,其它的东西在遭破坏后还可以重新回复或补救,而信息一旦丢失或者遭盗窃,那带来的损失就是无法估量的。不用共享的信息平时在做好信息备份即可,但如果涉及到网络文件的传输,那就必须要使用网络文件传输软件,一个好的网络文件传输软件不仅有海量的传输功能,最为重要的还是必须具有强大的安全性。这样

6、能有效的防范因为操作不当或者被攻击而导致的数据丢失。 文件网络传输的安全保障问题已经成为一个关注的焦点。文件的安全传输问题在当代社会引起了很多人的关注。在这种严峻的形势下,一个简单的实用功能,而且还可以运行于Windows操作系统,具有可移植性一定程度上,网络安全的文件传输工具可二次开发势在必行。 文件传输是各企事业及国家核心机构管理中必不可少的一部分,对文件传输进行规范化、制度化、科学化管理,对工作效率和工作质量有很大的提高,有利于促进企业向着高效,快速的方向发展。然而,文件传输管理也是日常管理工作中容易被忽视的一项工作,也是不容易做好的一项工作。稍有不慎,可能造成重要文件的丢失,后果严重。

7、一个好的文件传输系统应该是稳定可靠的,并且适用于各类企事业、机关单位、学校、医院等。系统对传输的各个环节进行科学管理,完成对日常文件传输的规范化、制度化、科学化,帮助企业更有效、更可靠的进行文件传输的管理。 2.1.2设计目的与要求文件安全传输系统的实现目标 安全文件传输系统以文件的安全传输为核心,以网络为支撑,是一个功能齐全的系统,方便了用户对文件传输的使用,同时用户在不了解该软件的加解密算法的情况下,依然可以对该软件进行使用。既保证了文件传输的安全性和完整性,也保证了用户的可操作性,便于信息的交流及共享。具体设计目标 该软件要具有两种状态,一种为发送端状态,一种为接收端状态。该软件的发送端

8、可以把要传输的文件用AES加密算法进行加密,并且能够完整的将加完密的文件、被加密的AES密钥、文件的MD5值等安全地传送到接收端。而接收端,可以接收发送端传来的文件和密钥,并且根据密钥将传来的文件进行解密。通过比较计算出的解密后文件的MD5值与接收到的Md5值检查文件的完整性。同时,软件操作界面简洁大方、操作容易,功能强大,符合文件传输的完整性和安全性的要求。2.2概要设计 2.2.1 系统功能描述计算待发送文件的MD5哈希值。这将用来验证文件的完整性。使用一个随机数生成器生成一个32字节的密钥,用作AES的密钥。用这个密钥和初始化向量加密待发送文件形成密文。用RSA公钥加密32位的AES密钥

9、,形成被加密的AES密钥。服务器功能服务器运行作为一个FTP服务器监听默认FTP端口。一旦文件接收到服务器,服务器触发解密()函数来解密接收到的文件。在解密的过程中,服务器提取前32个字节为原始文件哈希,第二个512字节的AES加密对称密钥和其他文件加密的文件数据。收到内容后分别读取被加密的AES密钥,通过RSA私钥解密得到AES密钥。读取初始化向量,与解得的AES密钥一起解密得到的密文,得到原始文件。用户端通过解密文件计算Md5值,与服务器端发送过来的MD5值比较,看两者是否相等, 如果两个散列值是相等的,完整性验证通过。否则,服务器识别文件完整性和删除文件失败。服务器的目的是接受匿名登录。

10、以及匿名用户有足够的权限来传输文件到服务器使用原始的FTP操作。 2.2.2 系统功能流程图最终文件被转移的结构将如下:初始化向量使用AES CBC模式操作客户端流程图:服务端流程图:2.2.3模块设计加密AES 256位加密是使用32字节密钥(256位)对称密钥。文件发送分成固定大小的块的大小的倍数16因为AES块密码标准使用16字节块。当分块,任何块不符合尺寸16字节的倍数的适当空间。CBC(密码块链接)是用作AES的操作模式。 解密一旦服务器从客户端接收的文件,从文件服务器提取不同部分,包括文件的MD5哈希,AES加密对称密钥和实际的加密文件。然后用OAEP恢复服务器使用RSA加密对称密

11、钥加密。使用AES对称密钥恢复,服务器使用AES加密解密加密文件。然而,解密的文件比客户端实际加密不同,因为它填补了空间为AES加密。然后服务器截断解密文件到原来的大小。验证完整性MD5散列用于验证收到的文件的完整性。服务器计算MD5哈希的解密和截断文件并与MD5哈希客户发送附加到文件。Python的hashlib库中使用这个程序来计算MD5哈希文件。如果两个MD5散列值是相等的,完整性保护。FTP服务器发送的结果完整性验证通过一个单独的套接字连接到服务器端在特定端口上运行。当客户端接收到完整的验证结果,客户端显示结果,并终止与成功的文件传输客户端程序。性能分析我用AES 256位加密加密文件

12、在客户端。然而,因为这个工具是用来传输大文件,之间有一个权衡的性能和安全加密。尽管AES - 256比AES - 128加密提供了更好的加密,加密大文件256 AES加密可以影响效用自256位加密的性能更先进的比128位加密。但这是可以预防的,如果一个16字节的密钥用于加密。我用CBC(密码块链接)AES的操作模式。一个问题是,在CBC模式下,一块用来加密的密码文本文件的下一个块。所以不能并行加密。但在解密,明文块可以从两个相邻块的密文中恢复过来。所以可以并行加密和性能可以提高在解密。安全协议AES密钥使用RSA公钥加密,保障密钥安全分配。2.3具体功能的实现2.3.1预备知识 TCP/IP网

13、络编程 Windows平台下程序开发 Python语言编程 对对称与非对称加密算法的理解2.3.2算法原理在安全协议的实现中,我用到了RSA算法1RSA算法简介RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA 密钥,其中

14、之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。2RS

15、A安全性RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数 的算法,那它肯定可以修改成为大数分解算法。 RSA 的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。人们已能分解多个十进制位的大素数。因此,模数n必须选大一些,因具体适用 情况而定。三算法实现过程-算法实现描述1选择两个不同的大素数p、q2. 计算n = p*q。 3. 计算n的欧拉函数(n)=(p-1)(q-1)。4. 选择整数e作为公钥,使e与(n)互素,且1e(n)。5. 用欧几里得算法计算d作为私钥,使d*e

16、=1 mod(n)。6. 加密:C=Me mod n 7. 解密:MCd mod n=(Me)d mod n= Med mod n。2.4运行结果 2.4.1程序界面截图2.5 待改进问题界面不够友好,只实现了基本功能,实际中会遇到的很多因素没有考虑周全。第三部分 课程设计体会3.1课程设计心得体会心得总结: 我们大概地将整个课程设计分为三个阶段,第一阶段主要通过查找资料,研究信息安全领域的近期热点与难点,并做必要的需求分析,确定课程设计的目标、题目,提出粗略的设计方案。第二阶段主要任务是设计程序,完成相应的功能。第三阶段主要是调试程序、做必要的修改、编辑报告的公共部分。 我在第二阶段担任组长

17、,主要是给各组员分配相应的编程任务,实现该系统相应的安全功能。让季雨量用Md5算法实现文件的完整性检查。刘帅主要负责用AES算法实现文件的加解密。最后我将组员们的代码组合到一起,加上安全协议功能形成集成性相对较高的系统。3.2源程序清单Client functionality:def startClient():_x000D_ from ftplib import FTP _x000D_ thread.start_new_thread(validation_server, (TCP_CON_PORT,) _x000D_ hostname = sys.argv2 _x000D_ ftp = FT

18、P(hostname) _x000D_ ftp.login() _x000D_ filepath = sys.argv3 _x000D_ encFilepath = encrypt(filepath) _x000D_ _x000D_ localfile = open(encFilepath,rb) _x000D_ try:_x000D_ print ! File Transfer in Progress._x000D_ result = ftp.storbinary(STOR +str(os.path.basename(encFilepath),localfile) _x000D_ excep

19、t Exception as e:_x000D_ print e _x000D_ else:_x000D_ print str(result) _x000D_ _x000D_ os.system(rm +encFilepath) _x000D_ print ! Waiting for integrity validation._x000D_ while True:_x000D_ passServer Functionalitydef startServer():_x000D_ authorizer = DummyAuthorizer() _x000D_ _x000D_ authorizer.a

20、dd_anonymous(USER_HOME + /anonymous, perm=elradfmwM) _x000D_ handler = MyHandler _x000D_ handler.authorizer = authorizer _x000D_ handler.banner = Server Ready. _x000D_ hostname = _x000D_ address = (hostname,21) _x000D_ server = FTPServer(address, handler)_x000D_ server.max_cons = 10 _x000D_ server.s

21、erve_forever() # start the serverEncryptiondef encrypt(filepath):_x000D_ print ! Starting Encryption._x000D_ aes_key = os.urandom(32) _x000D_ out_filename = filepath + .enc_x000D_ filehash = hashlib.md5(open(filepath).read().hexdigest() _x000D_ _x000D_ public_key_loc = PUB_KEY_LOC_x000D_ _x000D_ pub

22、key = open(public_key_loc, r).read() _x000D_ rsakey = RSA.importKey(pubkey) _x000D_ rsakey = PKCS1_OAEP.new(rsakey) _x000D_ encKey = rsakey.encrypt(aes_key) _x000D_ outFile = open(out_filename,w+) _x000D_ _x000D_ outFile.write(filehash) _x000D_ _x000D_ outFile.write(encKey) _x000D_ _x000D_ iv = .joi

23、n(chr(random.randint(0, 0xFF) for i in range(16) _x000D_ encryptor = AES.new(aes_key, AES.MODE_CBC, iv) _x000D_ filesize = os.path.getsize(filepath) _x000D_ chunksize=64*1024 _x000D_ _x000D_ with open(filepath, rb) as infile:_x000D_ outFile.write(struct.pack(Q, filesize) _x000D_ outFile.write(iv) _x

24、000D_ _x000D_ while True:_x000D_ chunk = infile.read(chunksize) _x000D_ if len(chunk) = 0: _x000D_ break _x000D_ elif len(chunk) % 16 != 0:_x000D_ chunk += * (16 - len(chunk) % 16) _x000D_ outFile.write(encryptor.encrypt(chunk) _x000D_ _x000D_ outFile.close()_x000D_ print + Encryption successful!_x0

25、00D_ return out_filename Decryptiondef decrypt(filepath): _x000D_ print ! Starting decryption._x000D_ dec_filename = ANONYMOUS_FILEPATH + os.path.basename(filepath).strip(.enc)_x000D_ inFile = open(filepath,r) _x000D_ chunksize=64*1024 _x000D_ hash = inFile.read(32) _x000D_ encAESKey = inFile.read(5

26、12) _x000D_ _x000D_ private_key_loc = PRIV_KEY_LOC _x000D_ privkey = open(private_key_loc, r).read() _x000D_ rsakey = RSA.importKey(privkey)_x000D_ rsakey = PKCS1_OAEP.new(rsakey) _x000D_ aes_key = rsakey.decrypt(encAESKey) _x000D_ _x000D_ origsize = struct.unpack(Q, inFile.read(struct.calcsize(Q)0

27、_x000D_ iv = inFile.read(16) _x000D_ decryptor = AES.new(aes_key, AES.MODE_CBC, iv) _x000D_x000D_ with open(dec_filename, wb) as outfile:_x000D_ while True:_x000D_ chunk = inFile.read(chunksize)_x000D_ if len(chunk) = 0:_x000D_ break_x000D_ outfile.write(decryptor.decrypt(chunk) _x000D_ _x000D_ outfile.truncate(origsize) _x000D_ _x000D_ print + File was decrypted and saved at +dec_filename+_x000D_ _x000D_ print ! Validating integrity._x0

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

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