【发布时间】:2017-08-04 06:06:47
【问题描述】:
我正在使用 sqlalchemy 和 oracle,但我不想将数据库密码直接存储在连接字符串中,如何存储加密密码?
【问题讨论】:
-
存储连接字符串是什么意思?
标签: python oracle sqlalchemy
我正在使用 sqlalchemy 和 oracle,但我不想将数据库密码直接存储在连接字符串中,如何存储加密密码?
【问题讨论】:
标签: python oracle sqlalchemy
我猜你正在寻找模块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
【讨论】:
您可以对字符串进行编码,但编码不会像 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)
【讨论】:
加密密码不一定很有用,因为您的代码必须包含解密的方法。通常您要做的是将凭据与代码库分开存储,并让应用程序在运行时读取它们。例如*:
您可能还希望考虑对与数据库的连接进行加密,以便密码在网络传输过程中不会泄露。
* 我不是安全工程师:这些示例并非详尽无遗,除上述示例外,还可能存在其他漏洞。
【讨论】: