《文件加密传输》
(湖北XX大学)课程设计报告
题 目: 文件加密传输
专 业: 信息安全
班 级: 17信息安全
学生姓名: XXX
学 号: 17XXXXX
指导教师: XXXX
20 20 年 6 月 2 日至20 20 年 6 月 17 日
计算机学院制
1. 选题意义
在当今这个时代,我们日常生活中的文件越来越多,我们自然的想到可以使用第三方的云服务,把自己的文件上传的云盘。甚至我们越来越会倾向于选择把本地的计算机文件传输到云盘上,这样不仅可以节省自己的本地内存,而且也支持多台设备的访问,日常生活会非常的便捷。与此同时我们希望能够保护我们自己的隐私,我们不希望我们上传上去的文件可以被云盘服务器方查看。除了上传到云盘之外,我们也希望我们可以把自己的私密文件加密之后,保存在本地,避免被他人看见,保护自己的隐私。
2.系统功能的分析
由于我们立足于满足日常的加密使用。我们提供对文件的加密切割,海明编码内置在AES加密模块中,提供上传到蓝奏云的功能。在每个分割后的小文件中,我们填充了一个32字节add部分,我们填充的这32字节是密文。其中add部分解密后,有16字节是这个小文件hash值,来验证这个小模块的完整性;13字节是文件名,处理之前先输出文件名,用户来决定是否正确,不是就这个文件就退出;2字节是分块的序号,合并文件的时候根据这个序号来合并;1个字节的配置,通过读取用户的配置文件来找出文件解密的AES密钥key1。
3.设计
我们设计的这个系统,把文件加密切割之后,日后再恢复。大体上的设计是:我们需要用户建立一个配置文件,在每一行填上不同的数据,这样把某一行的数据和用户的账号hash之后得到的就是文件AES加密的密钥key1。用户可以自己选择用哪一行的数据来生成密钥key1。
我们把用户的用户名处理后再hash生成key2,我们用key2来给add来进行AES加密,
这样我们填充进去的就是密文。我们解密时,无需输入任何密码直接把分块的文件拿来,用自己的用户名生成key2来解密,里面有一个字节是配置,通过这个配置与我们的配置文件结合,就可以找出key1,再进行文件解密了。
AES我们用的是Cryptodome这个库里面的AES.MODE_ECB加密模块,加密密钥和文本的长度必须是16字节的倍数,对于文本的补全,我们内置了自动补全b’\0’到16字节的功能。值得注意的是,解密的时候由于我们在后面补全了b’\0’,所以我们需要再去除掉我们填充进去的b’\0’。
我们在程序中设置了一个海明编码的模块,如果这个子文件有1bit的错误,那么我们是可以实现纠错的。当然超出了bit的错误是无法纠错的。
海明编码功能,我们是对二进制列表进行处理的,比如:[1,1,0,0,1,1,…1,0]。这就需要额外把字节转成二进制的列表,编码完整再把二进制列表转成字节,这个过程虽然额外增加的字节不多,但是转化的这个过程很耗时。值得注意的是,在进行海明编码的时候,我们把校验位加上之后,可能这时候整个的长度不是8的倍数,我们需要填充字节使它的长度成为8的倍数。
比如:
解码的时候,根据结束符的位置,来去除后面的bit,再解码。当然还有其他去除填充bit的处理方式(这个是最简单的方法,但是我的代码不是这么写的,懒得改了,我是在后面增加了一个字节,来说明我填充了多少个字节,到时候,数字节删掉即可)。
上传到云盘,我们用的是lanzou_API这个库,先需要传入我们自己的cookie进行登录,登录成功之后我们给出,云盘内的文件让用户来选择存放上传文件的文件夹。然后调用函数上传即可。
4.系统的功能介绍
密钥的生成:
加密模块:
上传到云盘:
合并解密模块:
5.心得体会
最大的感受是,加深了自己在字节处理方面的能力。通过这次编程,我的感受是如果想快速的把代码写完,不想反复修改的话,可以提前画一个流程图,按照流程图来编程。这样可以清晰的看出哪些部分有改进的空间,那里写的是多余的操作,只要按照流程图一步一步 写代码,当然我们后期是可以再改善流程图的,那么当我们代码的主要模块写完之后,就不需要再出现大幅度的修改。当然不同函数模块之间的返回值也要想好。
结语
:
其实我特别想把海明编码砍掉,因为在这个模块需要大量的时间。题目要求,我必须有这么一个编码的模块。如果大家用我的代码的话,警告!!!别用加密视频,因为时间会特别久,还不一定能解密,如果要加密视频的话,可以自己改代码把我的海明编码砍掉就行了。
代码
:github
直接运行login.py就行了。
转载:https://blog.csdn.net/sjxgghg/article/details/106720012