关于实训项目文件保护系统的总结

2020-01-17 11:25:15 浏览数 (1)

       此次实训项目的核心内容是文件的保护系统,核心是对文件的加解密。开发之初,本着边做边学习的想法,我们选了毫无基础的python作为开发语言,对语法的不熟悉成为了我们最大的障碍。我们最终所实现的目标有如下几个:简单的用户管理、文件加解密、用户公私密钥的分配。项目的运行过程如下:程序运行后显示登陆界面,用户输入的账号密码在经过哈希后与数据文件做对比,验证成功则进入主界面,并加载当前用户的数据文件,读取本用户的实时数据保险箱。登陆界面可以通过点击按钮跳转注册界面。主界面可以跳转密钥生成界面、实现文件加解密以及加密文件列表的显示。

  用户和文件的存取方式一致基本。每一个用户的信息构成一条字典信息,所有用户的信息作为一个列表,存入数据文件中。用户信息包括{用户名,密码,用户公钥},文件信息包括{文件路径(文件名),加密后文件数据,RSA加密后的AES的key值,加密模式}

  登陆界面密码以密文显示,实现代码:self.lineEdit_password.setEchoMode(QLineEdit.Password),登录按钮在按下后会调用验证函数,读取数据文件中的所有用户信息,验证用户名和密码。登陆界面具有记住密码功能,在配置文件config.ini中会记录当前用户名和密码以及记住密码是否被勾选,这些值在登陆成功后被写入config.ini。经过验证,此处不安全。即便不勾选记住密码,配置文件中依旧显示当前登陆用户名和密码。

  登陆界面可以直接跳转注册界面,注册界面与登陆界面代码基本一致。注册以后,在user.dat文件夹中写入用户名和密码的哈希值,同时写入公钥字段,初始值为空。

       密钥验证成功后,程序进入主界面中,在主界面显示时,会首先调用函数读取数据文件,若该用户尚无数据文件,则新建一个。在主界面,可以实现对文件的加密。文件加密是使用的对称加密方法AES的ECB模式,Key长度可选(16位或32位),Key由程序随机生成,Key值经过用RSA加密后存入数据文件,加密后的文件显示在下方文件列表中。解密时,用户需要提交私钥文件。私钥被提交后,程序先用私钥对一段固定信息进行签名,以当前用户的公钥进行验证,若匹配,则执行后续解密过程,若不匹配,则报错。在文件列表中,可以选中文件后点击解密按钮,也可以直接右键点击即可解密。在主界面显示过程中,程序会对数据文件中的文件数据进行读取,解密时,在变量中找到相关文件信息,读取文件Aes的key和加密模式,以用户私钥对key进行解密,然后再用Key对文件进行处理。

主界面可以跳转至密钥分配界面,当用户调转至密钥分配界面后,可以生成RSA 1024的密钥对,同时在程序会将其显示出。在用户点击保存私钥文件时,公钥被加载进用户数据文件,私钥被保存入以用户名命名的pem文件中,用户自行保存。

      界面的生成用了PYQT5,在使用过程中,有个问题主要注意,由QTdesigner设计的界面在转为代码以后,默认继承自object,这导致在该文件下直接添加代码会导致代码未必可用(比如我们曾试图让其弹出QMessageBox,不可行),在网上查找解决方法时,有人提出新建一个类,继承界面代码即可,并未验证。我们的解决方法为自己写一个相同的类,直接在init函数中调用界面函数的setUI函数。

      文件的读取和写入采用的 pickle和codecs 两个包,代码相当简洁易读。

  由于初次写python,代码中大量复用其他人的代码,代码并不及规范,美观和可读性还需要提高。

  代码地址 https://github.com/StevenQin97/FileVault.git

0 人点赞