Eric6与pyqt5学习笔记 11【编写自己的密码加密管理器~ python3.5+PYQT5】

前言

自己习惯性将密码记录在本地文档中,但依旧感觉到不安全,一旦该文档泄露,则全军覆没也,本地自己尝试简单做个小软件去对存密码的文件进行加解密

原理分析

选用到的加密算法是为众所知的RSA和AES

算法流程:

  • 随意选择两个大的质数 p , q , p,q, p,q,其中 p ≠ q p\ne q p̸=q,计算 n = p ∗ q n=p*q n=pq
  • 根据欧拉函数求得一个欧拉数 r = φ ( n ) = φ ( p ) φ ( q ) = ( p − 1 ) ( q − 1 ) {\displaystyle r=\varphi (n)=\varphi (p)\varphi (q)=(p-1)(q-1)} r=φ(n)=φ(p)φ(q)=(p1)(q1)
  • 求得一个小于欧拉数r的整数 e e e
  • 求得 e e e关于 r r r的模逆元 d d d
  • 其中 ( n , e ) (n,e) (n,e)是公钥, ( n , d ) (n,d) (n,d)是私钥
  • 对于明文 P P P和密文 C C C
  • 加密: C = ( P e ) m o d    n C=(P^e)\mod n C=(Pe)modn
  • 解密: P = ( C d ) m o d    n P=(C^d)\mod n P=(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值