Python 我是否应该在每次用户加密新文件时生成新的RSA密钥对?

Python 我是否应该在每次用户加密新文件时生成新的RSA密钥对?,python,python-3.x,pycryptodome,python-cryptography,Python,Python 3.x,Pycryptodome,Python Cryptography,我正在做一个项目,我要加密一些文件。我已经实现了一个AES函数,现在我正在实现一个RSA部分。在AES方面,每次我要加密一个新文件时,我都会创建一个新密钥,即使使用不同的密码是相同的。要恢复上述密码,我需要将已知密码和salt散列在一起。我应该对RSA公钥和私钥执行同样的操作吗?如果是这样,我可以将AES密钥上使用的方法应用于RSA密钥吗?还是我的方法应该有所不同 这是我生成RSA密钥的方式: 从Crypto.PublicKey导入RSA 第二类密钥生成器: 定义索引(自): self.\uu

我正在做一个项目,我要加密一些文件。我已经实现了一个AES函数,现在我正在实现一个RSA部分。在AES方面,每次我要加密一个新文件时,我都会创建一个新密钥,即使使用不同的密码是相同的。要恢复上述密码,我需要将已知密码和salt散列在一起。我应该对RSA公钥和私钥执行同样的操作吗?如果是这样,我可以将AES密钥上使用的方法应用于RSA密钥吗?还是我的方法应该有所不同

这是我生成RSA密钥的方式:

从Crypto.PublicKey导入RSA
第二类密钥生成器:
定义索引(自):
self.\uu key=RSA.generate(2048)
def生成公用密钥(自):
返回self.\uuu key.publickey().exportKey()
def生成私钥(自身、密码):
返回self.\uu key.exportKey(密码短语=password,pkcs=8,protection=“scryptAndAES128 CBC”)
这是我处理加密/解密过程的方式:

从Crypto.PublicKey导入RSA
从Crypto.Random导入获取\u Random\u字节
从Crypto.Cipher导入PKCS1_OAEP,AES
类别RSA加密:
def uuu init uuu(自,公钥):
self.public_key=RSA.import_key(open(public_key,'rb').read())
self.\uuuu cipher\u rsa=PKCS1\u OAEP.new(self.public\u key)
self.\u session\u key=get\u random\u字节(16)
self.\uuuu cipher\u aes=aes.new(self.\uuuuu会话\u密钥,aes.MODE\u EAX)
self.\uuuu nonce=self.\uuuuu cipher\u aes.nonce
def获取会话密钥(自):
返回self.\u密码\u rsa.加密(self.\u会话\u密钥)
def获取时间(自身):
立即返回自我
def加密(自身、明文_字节):
cipher\u text,tag=self.\u cipher\u aes.加密\u和\u摘要(明文\u字节)
返回密码文本、标记
@静力学方法
def decrypt(私钥、密码、加密会话密钥、nonce、标记、密码文本):
普通密钥=RSA.import密钥(私钥,密码短语=密码)
密码\u rsa=PKCS1\u OAEP.new(普通\u私钥)
会话密钥=密码rsa.解密(加密会话密钥)
密码\u aes=aes.new(会话\u密钥,aes.MODE\u EAX,nonce)
返回密码。解密和验证(密码文本、标记)

通常是否定的,或者是肯定的,但您还没有真正解释您的应用程序或安全模型是什么。您可以尝试在security.stackexchange.com上描述您的用例,因为您生成密钥的实际代码并不是这里真正感兴趣的内容。我投票结束这个问题,因为我认为应该将它移至security.stackexchange.com,并对应用程序和安全模型进行更广泛的解释是。用户只需指定公钥而不是密码。他们不需要私钥来加密(只需要解密)。对称密码密钥应该是纯随机的,而不是基于密码。如果用户想要密码保护,他们应该密码保护他们的私钥,而不是加密文件。