Eric6与pyqt5学习笔记 11【编写自己的密码加密管理器~ python3.5+PYQT5】
2018-03-04 02:06
381 查看
前言
自己习惯性将密码记录在本地文档中,但依旧感觉到不安全,一旦该文档泄露,则全军覆没也,本地自己尝试简单做个小软件去对存密码的文件进行加解密原理分析
选用到的加密算法是为众所知的RSA和AES算法流程:
随意选择两个大的质数p,q,p,q,其中p≠qp≠q,计算n=p∗qn=p∗q根据欧拉函数求得一个欧拉数r=φ(n)=φ(p)φ(q)=(p−1)(q−1)r=φ(n)=φ(p)φ(q)=(p−1)(q−1)
求得一个小于欧拉数r的整数ee
求得ee关于rr的模逆元dd
其中(n,e)(n,e)是公钥,(n,d)(n,d)是私钥
对于明文PP和密文CC
加密:C=(Pe)modnC=(Pe)modn
解密:P=(Cd)modnP=(Cd)modn
rsa库直接搞定
# -*- coding: utf-8 -*- import rsa # 先生成一对密钥,然后保存.pem格式文件,当然也可以直接使用 (pubkey, privkey) = rsa.newkeys(1024) print pubkey print privkey message = 'Hello RSA!!' # 用公钥加密、再用私钥解密 crypto = rsa.encrypt(message, pubkey) message = rsa.decrypt(crypto, privkey) print message # sign 用私钥签名、再用公钥验证签名 signature = rsa.sign(message, privkey, 'SHA-1') #SHA, Secure Hash Algorithm 安全散列算法 rsa.verify(message, signature, pubkey) rsa.verify('Hello', signature, pubkey)
AES直接搞定
#coding: utf8 import sys from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex class prpcrypt(): def __init__(self, key): self.key = key self.mode = AES.MODE_CBC #加密函数,如果text不是16的倍数【加密文本text必须为16的倍数!】,那就补足为16的倍数 def encrypt(self, text): cryptor = AES.new(self.key, self.mode, self.key) text = text.encode("utf-8") #这里密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)Bytes 长度.目前AES-128足够用 length = 16 count = len(text) add = length - (count % length) text = text + (b'\0' * add) self.ciphertext = cryptor.encrypt(text) #因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题 #所以这里统一把加密后的字符串转化为16进制字符串 return b2a_hex(self.ciphertext).decode("ASCII") #解密后,去掉补足的空格用strip() 去掉 def decrypt(self, text): cryptor = AES.new(self.key, self.mode, self.key) plain_text = cryptor.decrypt(a2b_hex(text)) return plain_text.rstrip(b'\0').decode("utf-8") if __name__ == '__main__': pc = prpcrypt('xxxxxxxxxxxx') #初始化密钥 e = pc.encrypt("1") d = pc.decrypt(e) print (e, d)
一款自己开发的软件
结合以上理论,及pyqt5,我开发了一款小软件,版本1.0.0欢迎提供bug,及修改意见
使用流程如下:
建议创建好目录,将软件(exe)文件放入,双击即可运行
每次使用时,输入个人密码(必须要求6位字母或者数字,第一次输入即为初始密码),打开软件
自行打开需要处理的txt文件进行加密,保存默认存储在当前文件夹/Crypt/crypt.txt中,如需存储多份,则需使用另存为功能
之后每次使用时,打开密文文件,解密即可查看私密信息
注意:第一次使用时,会生成pub.txt和priv.txt,内部结合输入的密码经过加密处理过的公私钥文件,切勿删除
备份问题: 每次加密会默认备份刚刚打开文件于软件所在目录/Backup/backup.txt中
多用户使用将软件复制到不同文件夹下即可
快捷键说明如下:
Ctrl+O 打开文件 Ctrl+S 保存在默认位置(软件目录下Crypt目录中crypt.txt) Alt+S 另存为..文件 Ctrl+E 加密文件 Ctrl+D 解密文件 Ctrl+A 了解软件
源码分享
https://github.com/q1271964185/Pyqt5_StudyNotes/tree/master/encrypt下载地址
链接:https://pan.baidu.com/s/1c3j8Y9i 密码:wzf9相关文章推荐
- PYQT5+python3.6+QT编写一个带ui的加密解密小程序<凯撒加密><维吉尼亚加密><仿射加密><培根加密>
- Python编写可视化界面(Python3.5+PyCharm+PyQt)
- 使用python加密自己的密码
- 使用python加密自己的密码
- python3.5、pyqt5项目,pyinstaller打包exe
- python3.5-ssh免输入密码过程
- Python学习 Python3.5+PyQt5环境--------01、从一个GUI开始
- 【python】自己编写的Set类
- PyQt5:布局管理器:绝对定位方式(11)
- 【python密码学编程】8.使用换位加密法加密
- 在python3.5编写了一个AES加解密程序
- Python基础-Day 11 - 编写日志创建页
- 有趣的密码加密策略,你知道自己的密码如何在网站中存储的吗?
- python常用工具让你提高工作效率--常用操作编写,方便自己操作
- python3.5 + PyQt4,错误 createBackend() phonon backend plugin could not be loaded
- python3.5 + PyQt4 + pyinstaller打包错误,Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.
- 从零开始编写自己的C#框架(11)——创建解决方案
- 用shell编写的简单密码加密程序,涉及到ASCII与字符的相互转换,以及命令结果输出到变量
- Python学习 - 编写自己的ORM(2)
- 给自己不同网站的密码加密