Encryption 在Python中使用RSA加密文件而不存储任何密码

Encryption 在Python中使用RSA加密文件而不存储任何密码,encryption,public-key-encryption,Encryption,Public Key Encryption,我在帖子里问过一个类似的问题,但这个问题有不同的含义 我用AES加密一个文件,使用RSA加密AES密码 唯一的区别是我不想存储AES密码。用户必须提供其RSA密钥的路径和密码 那么你觉得这个计划怎么样 path_to_RSA_key = ... # Given by the user pwd = ... # This will be used to encrypt the file. Also given by user. rsa_enc = RSA.importKey(path_to_RSA

我在帖子里问过一个类似的问题,但这个问题有不同的含义

我用AES加密一个文件,使用RSA加密AES密码

唯一的区别是我不想存储AES密码。用户必须提供其RSA密钥的路径和密码

那么你觉得这个计划怎么样

path_to_RSA_key = ... # Given by the user pwd = ... # This will be used to encrypt the file. Also given by user. rsa_enc = RSA.importKey(path_to_RSA_key) # Encrypt the Password with RSA, keep the last 32 characters rsa_pwd = rsa_enc.encrypt(pwd)[-32:] # Aes, with the encrypted password aes_enc = AES.new(rsa_pwd, AES.MODE_CBC) # Encrypt the file with AES... # Store only the encrypted file # Don't store the password in any way, don't store the path to RSA key 路径到RSA密钥=…#由用户提供 pwd=…#这将用于加密文件。也由用户给出。 rsa\u enc=rsa.importKey(路径到rsa\u密钥) #使用RSA加密密码,保留最后32个字符 rsa_pwd=rsa_enc.encrypt(pwd)[-32:] #Aes,使用加密密码 aes_enc=aes.new(rsa_pwd,aes.MODE_CBC) #用AES加密文件。。。 #只存储加密的文件 #不要以任何方式存储密码,不要存储RSA密钥的路径 另一种方案是经典方案,当您生成随机密码时,使用随机密码通过AES加密文件,使用RSA加密随机pwd,并仅存储加密结果

如果你真的想知道我为什么需要这个,这是我的一个项目


你觉得这个计划怎么样?提前谢谢你

似乎有些混乱。您提到您不想存储“密码”,但您使用的是RSA,而不是对称算法。术语“password”强烈地暗示了对称加密中使用的共享秘密,而且似乎您正在努力将RSA融入您创建的模型中

我看到的问题是,此功能可能不适合您计划的使用。你的计划似乎专注于对称密码。此外,以这种方式使用非对称密钥可能是一个问题。我认为非对称加密用于加密nonce是有原因的;它可能无法抵御针对您提议的方案发起的攻击

不对称密钥通常使用如下:

  • 生成一个纯随机的32字符键,并将其称为“nonce”
  • 用“nonce”加密消息并称之为密文
  • 使用非对称密钥(可能是公钥,但您应该指定)加密“nonce”
  • 结果由密文和非对称加密的“nonce”组成
  • 解密只需要与用于加密的非对称密钥相反的配对密钥


    如果你是铁杆,你可以加密(使用AES+密码或类似的方式)公钥或私钥,可以用来解密nonce并发送出去兜风。遗憾的是,这并没有真正提高AES+密码的安全性,而且您的消息中的膨胀也增加了很多。

    似乎有些混乱。您提到您不想存储“密码”,但您使用的是RSA,而不是对称算法。术语“password”强烈地暗示了对称加密中使用的共享秘密,而且似乎您正在努力将RSA融入您创建的模型中

    我看到的问题是,此功能可能不适合您计划的使用。你的计划似乎专注于对称密码。此外,以这种方式使用非对称密钥可能是一个问题。我认为非对称加密用于加密nonce是有原因的;它可能无法抵御针对您提议的方案发起的攻击

    不对称密钥通常使用如下:

  • 生成一个纯随机的32字符键,并将其称为“nonce”
  • 用“nonce”加密消息并称之为密文
  • 使用非对称密钥(可能是公钥,但您应该指定)加密“nonce”
  • 结果由密文和非对称加密的“nonce”组成
  • 解密只需要与用于加密的非对称密钥相反的配对密钥


    如果你是铁杆,你可以加密(使用AES+密码或类似的方式)公钥或私钥,可以用来解密nonce并发送出去兜风。遗憾的是,这并没有真正提高AES+密码的安全性,而且消息中的膨胀也大大增加了。

    看起来您正在使用RSA作为一种特殊的密码哈希算法。我不认为这能给你带来什么。你可以在谷歌上搜索基于密码的加密(PBE)和PKCS#5,以便在提交之前查看更多标准方案。该方案的一个问题是,使用公钥算法的加密只需要公钥。如果只希望私钥能够加密,则需要进行签名,而不是加密。如果您在磁盘上存储了一半的密钥,您可以存储一个加密的AES密钥并使用密码对该密钥进行解密,但正如GregS所说,在这种情况下,基于pasword的加密更有意义。@101100:和@GregS:谢谢您的回答!您可以使用公钥或私钥进行加密。同样,PyCrypto从私钥生成公钥。我还检查了PKCS#5,我将看看如何实现它。看起来您正在使用RSA作为临时密码哈希算法。我不认为这能给你带来什么。你可以在谷歌上搜索基于密码的加密(PBE)和PKCS#5,以便在提交之前查看更多标准方案。该方案的一个问题是,使用公钥算法的加密只需要公钥。如果只希望私钥能够加密,则需要进行签名,而不是加密。如果您在磁盘上存储了一半的密钥,您可以存储一个加密的AES密钥并使用密码对该密钥进行解密,但正如GregS所说,在这种情况下,基于pasword的加密更有意义。@101100:和@GregS:谢谢您的回答!您可以使用公钥或私钥进行加密。同样,PyCrypto从私钥生成公钥。我还检查了PKCS#5,我将看看如何实现它。