【发布时间】:2011-09-16 23:32:33
【问题描述】:
我在帖子Encrypting a file with RSA in Python 中也问过类似的问题,但这个问题有不同的内涵。
我正在使用 AES 加密文件,使用 RSA 加密 AES 密码。
唯一的区别是我真的不想存储 AES 密码。用户必须提供其 RSA 密钥的路径和密码。
那么你觉得这个方案怎么样?
path_to_RSA_key = ... # 用户给定 pwd = ... # 这将用于加密文件。也是用户给的。 rsa_enc = RSA.importKey(path_to_RSA_key) # 使用 RSA 加密密码,保留最后 32 个字符 rsa_pwd = rsa_enc.encrypt(pwd)[-32:] # aes,使用加密密码 aes_enc = AES.new(rsa_pwd, AES.MODE_CBC) # 使用 AES 加密文件... # 只存储加密文件 # 不要以任何方式存储密码,不要存储 RSA 密钥的路径替代方案是经典方案,当您生成随机密码时,使用随机密码使用 AES 加密文件,使用 RSA 加密随机密码并仅存储加密结果。
如果你真的想知道我为什么需要这个,这是我的一个项目,http://code.google.com/p/scrambled-egg
你觉得这个方案怎么样?提前谢谢你!
【问题讨论】:
-
看起来您正在使用 RSA 作为临时密码散列算法。我认为这不会给你买任何东西。您可以在 Google 上搜索基于密码的加密 (PBE) 和 PKCS#5,以查看更多标准方案,然后再提交您的方案。
-
这个方案的一个问题是使用公钥算法加密只需要公钥。如果您只希望私钥能够加密,则需要进行签名,而不是加密。如果您将一半密钥存储在磁盘上,您可以存储加密的 AES 密钥并使用密码来解密该密钥,但正如 GregS 所说,在这种情况下,基于密码的加密更有意义。
-
@101100:和@GregS:谢谢您的回答!您可以使用相同的公钥或私钥进行加密,PyCrypto 从私钥生成公钥。我还检查了 PKCS#5,我会看看我是如何实现的。
标签: encryption public-key-encryption