【问题标题】:How to encrypt/decrypt a configuration file in python如何在python中加密/解密配置文件
【发布时间】:2019-04-24 21:50:46
【问题描述】:

我有一个读取配置文件的 python 应用程序。我需要加密配置文件,所以它在磁盘上不是普通的。然后我需要在我的应用程序中解密它并读取值。我看到有一个库 Secureconfig 但它仅适用于 python 2。python 中是否有类似的库可以帮助我做到这一点?

【问题讨论】:

    标签: python encryption configuration-files


    【解决方案1】:

    由于您的程序必须包含解密密钥,因此您将无法保护确定的用户的数据,只会使解密变得更加困难。

    根据Cryptographic Services — Python 3.7.3 documentation,Python 不包含任何开箱即用的真正密码。只有 codecs 具有 Caesar's cipher 和标准编码,可以像 UUEncode 和 Base64 那样可恢复地破坏数据。

    因此,如果以上内容对您来说还不够好,您需要自己实现对称密码或使用库。参见例如Python AES encryption without extra module.

    由于这里不可能实现真正的安全性,因此取决于您想为黑客用户制作它的难度将是security through obscurity:使用非标准密码,不要一次解密所有文件,制作很多加密/解密发生的不同位置,使用混淆代码,添加隐藏校验和以防止篡改,使用存储在其他意外位置的文件之外的数据位等。

    如果您只是想让普通用户无法理解文件,那么在使用文本编辑器查看时,像 Base64 与 XOR cipher 的组合已经使数据完全无法理解。

    【讨论】:

    • 我的代码可以包含解密密钥,假设有什么选项?
    • @H.Z.我想我概述了这些选项。你还想听什么?
    【解决方案2】:

    @H.Z. - 正如 Ivan 指出的那样,有许多选项取决于您想要的安全级别。

    我正在从事与您所描述的类似的项目,并且我正在使用 cryptogrophay 库 (https://cryptography.io/en/latest/)

    您可以使用 pip 轻松安装它。

    我在一步过程中使用它来加密我的配置文件 - 然后在我的主 Python 文件中使用单独的脚本来解密。解密脚本将包含从加密脚本生成的密钥。

    如果您尚未解决此问题,希望此信息对您有所帮助。

    【讨论】:

      【解决方案3】:

      打算稍微挖掘一下这个线程。 我编写了一个 ConfigParser 继承类,它将 AES-256 对称加密添加到 ConfigParser 配置文件。 该类本身及其底层加密已经为几个项目投入生产,并且经过了很好的测试。

      用法与 ConfigParser 非常相似,不同之处在于您使用 AES 密钥并编写二进制文件而不是文本。

      使用pip install configparser_crypt安装

      如何使用 ConfigParserCrypt 创建加密的 ini 文件

      from confiparser_crypt import ConfigParserCrypt
      
      file = 'config.encrypted'
      conf_file = ConfigParsercrypt()
      
      # Create new AES key
      conf_file.generate_key()
      # Don't forget to backup your key somewhere
      aes_key = conf_file.aes_key
      
      # Use like normal configparser class
      conf_file.add_section('TEST')
      conf_file['TEST']['foo'] = 'bar'
      
      # Write encrypted config file
      with open(file, 'wb') as file_handle:
          conf_file.write_encrypted(file_handle)
      

      如何读取加密的ini文件

      from confiparser_crypt import ConfigParserCrypt
      
      file = 'config.encrypted'
      conf_file = ConfigParsercrypt()
      
      # Set AES key
      conf_file.aes_key = my_previously_backed_up_aes_key
      
      # Read encrypted config file
      conf_file.read_encrypted(file)
      print(conf_file['TEST']['foo'])
      

      【讨论】:

        猜你喜欢
        • 2011-01-10
        • 1970-01-01
        • 2013-05-21
        • 2013-12-07
        • 2011-01-27
        • 1970-01-01
        • 2023-04-01
        • 2021-11-13
        • 2010-11-11
        相关资源
        最近更新 更多