前言
自己习惯性将密码记录在本地文档中,但依旧感觉到不安全,一旦该文档泄露,则全军覆没也,本地自己尝试简单做个小软件去对存密码的文件进行加解密
原理分析
选用到的加密算法是为众所知的RSA和AES
算法流程:
- 随意选择两个大的质数 其中 ,计算
- 根据欧拉函数求得一个欧拉数
- 求得一个小于欧拉数r的整数
- 求得 关于 的模逆元
- 其中 是公钥, 是私钥
- 对于明文 和密文
- 加密:
- 解密:
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://pan.baidu.com/s/1c3j8Y9i 密码:wzf9