您的位置:首页 > 编程语言 > Python开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: