【问题标题】:How to use encrypted password in connection string of sqlalchemy?如何在sqlalchemy的连接字符串中使用加密密码?
【发布时间】:2017-08-04 06:06:47
【问题描述】:

我正在使用 sqlalchemy 和 oracle,但我不想将数据库密码直接存储在连接字符串中,如何存储加密密码?

【问题讨论】:

  • 存储连接字符串是什么意思?

标签: python oracle sqlalchemy


【解决方案1】:

我猜你正在寻找模块PyCrypto

您可以使用所需的加密并将加密文本存储在数据库中,获取数据后您可以再次解密。

这里是 PyCrypto 的示例:

>>> from Crypto.Hash import SHA256
>>> hash = SHA256.new()
>>> hash.update('message')
>>> hash.digest()
'\xabS\n\x13\xe4Y\x14\x98+y\xf9\xb7\xe3\xfb\xa9\x94\xcf\xd1\xf3\xfb"\xf7\x1c\xea\x1a\xfb\xf0+F\x0cm\x1d'

更多内容可以参考documentation

【讨论】:

  • 谢谢,但这不是我想要的,因为加密算法可以通过阅读代码得到。sqlalchemy内部有没有加密机制呢?
  • 你可以试试这个:variable-scope.com/posts/…
  • 或者你可能想从stackoverflow本身使用这个解决方案:stackoverflow.com/a/33717279/6918812
  • 我认为只要黑客能够读取您的代码,他就总能解密您的密码。保护密码的唯一方法是提示用户而不是存储在代码中。
【解决方案2】:

您可以对字符串进行编码,但编码不会像 cmets 中提到的 Gord Thompson 那样加密。任何对base64有点了解的人都可以逆向。

import base64
password = "yourpassword".encode("utf-8")
encoded = base64.b64encode(password)
print(encoded)

解码是一个问题

decoded = base64.decodebytes(encoded).decode('utf-8')
print(decoded)

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。
  • 请注意,encoding 与 encrypting 不同。
【解决方案3】:

加密密码不一定很有用,因为您的代码必须包含解密的方法。通常您要做的是将凭据与代码库分开存储,并让应用程序在运行时读取它们。例如*:

  • 从文件中读取它们
  • 从命令行参数或环境变量中读取它们(请注意,有些操作系统命令可以从正在运行的进程中检索这些值,或者它们可能会被记录)
  • 使用无密码连接机制,例如 Unix 域套接字(如果可用)
  • 从专用的机密管理系统中获取它们

您可能还希望考虑对与数据库的连接进行加密,以便密码在网络传输过程中不会泄露。


* 我不是安全工程师:这些示例并非详尽无遗,除上述示例外,还可能存在其他漏洞。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多