我编写了一个使用Twitter API的基本Python应用程序。我需要能够对我的API秘密进行编码,因为它在我的程序中永远不应该是人类可读的(Twitter的话)。我应该如何在Python中执行此操作?有可能吗?
答案 0 :(得分:4)
将API密钥存储在外部文件中并在运行时加载它。请务必永远不要提交外部文件或发布它。一旦加载就混淆密钥并不能真正阻止它们窃取密钥(特别是如果他们有资源来解除你的混淆,就像jonrsharpe所指出的那样)。
这是一个粗略的例子,我相信你可以根据自己的需要进行改进:
secret_keys文件:
{
"TWITTER_SECRET" : "somebase64encodedkey"
}
蟒:
import json
secrets_filename = 'secret_keys'
api_keys = {}
with open(secrets_filename, 'r') as f:
api_keys = json.loads(f.read())
print api_keys['TWITTER_SECRET'] # somebase64encodedkey
答案 1 :(得分:0)
正如@cziemba 指出的那样,将密钥保存在另一个文件中是一种常用方法。但是,如果您将使用 git,请确保将文件包含在 .gitignore
中,这样您就不会提交密钥并可能将其推送到 github。您还可以将密钥保存在存储库之外并使用绝对路径来读取它,例如 ~/Documents/my_secrets/twitter.json
。
另一种常用的方法是在环境变量中添加密钥或令牌。此 article 展示了如何设置环境变量。
要在代码中获取环境变量,例如“TWITTER_SECRET”,请使用
import os
secret = os.environ["TWITTER_SECRET"]
os.environ
是环境变量字典,如果“TWITTER_SECRET”不在环境变量中,则会引发 IndexError 。因此,您可能希望根据程序的需要使用 dictionary get method 或 try except statement。