我应该如何在Python中加密API令牌?

时间:2015-03-17 13:54:20

标签: python api encryption twitter

我编写了一个使用Twitter API的基本Python应用程序。我需要能够对我的API秘密进行编码,因为它在我的程序中永远不应该是人类可读的(Twitter的话)。我应该如何在Python中执行此操作?有可能吗?

2 个答案:

答案 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 methodtry except statement