以下内容是我在自己研究加密的时候发现的问题:
我的目标是写一个密码存储程序,但是涉及密码存储又不使用数据库,就必须要对存储密码的文件进行加密,而读取这些密码还需要解密。在加密手段中比较可行的就是RSA加密。然而RSA加密在用Python实现时存在一些问题。crypto、pycrypto、pycrytodome这三个本来是足够强大且极其便捷的加密解密模块,但坏消息是我用PyCharm是无法使用这些模块的,需要VS,而且下载了VS也很麻烦,还要修改一些列的东西才能使pip install xx这一简单的指令得以运行。可用的就是rsa模块,但是我从网上捯饬了好几个小时都没找到一个完整的从加密解密到密钥存储全流程问题解决(主要是我需要静态密钥,需要存储下来,不然早解决了)。于是在总结了诸多前人的程序,再结合我的综合和修正完善,我实现了仅使用rsa模块就能完成一系列连贯的操作。
上代码:
- import rsa
-
-
- (pubkey, privkey) = rsa.newkeys(1024) # 获取1024位的公钥密钥,获取出的结果为rsa.key.PublicKey类型
-
- pub = pubkey.save_pkcs1() # 公钥转化为bytes类型
- pub_file = open('public.pem', 'w+') # 新建(也算是打开)public.pem文件,这个文件是存储rsa密钥专用的
- pub_file.write(pub.decode()) # 将pub解码为字符串后写入文件
- pub_file.close() # 关闭文件
-
- pri = privkey.save_pkcs1() # 私钥转化为bytes类型
- pri_file = open('private.pem','w+') # 同上之理
- pri_file.write(pri.decode()) # 同上之理
- pri_file.close() # 同上之理
-
- message = "message" # 明文
- with open('public.pem') as publickfile:
- p = publickfile.read() # 打开文档读取密钥,p为字符串型
-
- with open('private.pem') as privatefile:
- q = privatefile.read() # 同上之理
-
- privkey = rsa.PrivateKey.load_pkcs1(q.encode()) # 编码q为bytes型,然后转换回rsa.key.PublicKey类型
- pubkey = rsa.PublicKey.load_pkcs1(p.encode()) # 同上之理
-
- crypto = rsa.encrypt(message.encode(), pubkey) # 编码
- message = rsa.decrypt(crypto, privkey) # 解码
- print(message.decode())