【问题标题】:A good way to encrypt database fields?加密数据库字段的好方法?
【发布时间】:2011-04-28 02:54:31
【问题描述】:

我被要求加密数据库中的各种数据库字段

问题是这些字段被读取后需要解密。


我正在使用 DjangoSQL Server 2005

有什么好主意吗?

【问题讨论】:

    标签: python sql sql-server django encryption


    【解决方案1】:

    是的。告诉谁让你变得真实。没有/没有什么意义。如果是关于存储的值——企业版 2008 可以存储加密的数据库文件。

    否则,如果您真的需要(有所有缺点)只需加密它们并将它们存储为字节字段。

    【讨论】:

    • 不,通常它是零意义的 - 除非您编写 LastPass 之类的程序。如果密钥在服务器(Web 服务器)上的某处可用,则特别是零意义。这是一个完整的小问题,具有巨大的负面影响(搜索消失了)。
    • 因为它是。在 099% 的时间里,加密领域是一件完全没有意义的事情。
    • @tomtom :是的,关于最后一关是正确的!我忘了提一下,如果您正在编写类似于 lastpass 的单点登录,那么您可以在其中存储使用用户自己的密钥加密的用户所有密码。
    • SQL注入呢?字段加密至少可以保护一些敏感信息。
    • 加密字段确实有意义!它可以避免 SQL 转储或备份文件中的数据泄露。只是不要仅仅依靠这一点,确保其他安全威胁也得到缓解。见security.stackexchange.com/questions/16939/…
    【解决方案2】:

    如果您要存储密码等内容,可以这样做:

    1. 将用户的密码存储为他们的 SHA256 哈希值
    2. 获取用户密码
    3. 散列
    4. 列表项

    根据存储的密码检查它

    您可以使用 hashlib 模块在 Python 中创建 SHA-256 哈希。

    希望对你有帮助

    【讨论】:

    • 很遗憾我需要完全解密它们
    • @RadiantHex 列是否涉及密码?这些不必解密即可进行密码检查。否则,您可能需要考虑在存储值之前进行一些 RSA 加密。
    • 解密密码——一场安全噩梦。
    • @RadiantHex:请更新这个加密/解密业务是否涉及密码的问题。问题不清楚。 cmets 做了一个假设。只有可以提供事实。请澄清。
    • 这是一个糟糕的建议。 salt + SHA256 哈希不足以保护密码。慢速散列函数是必不可少的。使用 Argon2,或者至少使用 scrypt。
    【解决方案3】:
    【解决方案4】:

    我遇到了同样的问题,并创建了以下解决方案:http://djangosnippets.org/snippets/2489/

    我碰巧使用 M2Crypto 作为密码引擎,但如果需要,可以换掉。

    正如 TomTom 指出的那样,这样做只是提高了攻击者的门槛,而不是使恶意解密成为不可能 - 除了访问您的数据库之外,他们现在还需要访问您存储输入密钥派生函数的密码短语的任何位置。但是,通过以这种方式将密钥从它所保护的数据中分离出来,您至少现在可以选择进一步保护该密钥(例如使用密钥管理服务器)以提高标准。纵深防御是一个很好的策略,但您还需要确定对于给定应用程序来说什么是过度杀伤力。

    加密任何可能对搜索或排序有用的字段也是一个糟糕的主意(我只使用这个技巧来存储不支持正确标记化 OAuth 连接的 Web 服务的 OAuth 凭据)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多