保护 Python 中的 API 键
Protecting an API key in Python
我正在编写一个 Python 程序,它使用 API 密钥从外部服务访问数据。该程序使用我的 Python 脚本中硬编码的密钥调用此服务。有没有一种方法可以在某种程度上保护这个密钥(不是不可逆的,而是一种防止人们直接从脚本中复制密钥的方法)?程序是否应该从我的服务器请求密钥?也许是 C 库?
Should the program request the key from my server?
即便如此,一个非常积极(或熟练,或两者兼而有之...)的用户也可以通过嗅探工具(例如 Wireshark(如果您未使用 https)或什至通过修改您的脚本来获取密钥只需在某处添加 print
。
如果你想保护自己免受 "Hackers" 的侵害,这是不可能的,因为如果 python 脚本可以访问你的 API,那么可以修改同一个脚本来做一些令人讨厌的事情具有访问权限的事物。你将不得不在那里找到另一个解决方案。
如果您想保护自己免受 "shoulder surfers"(路过时看着您的显示器的人)的伤害,那么 base64.b64encode("key")
和 base64.b64decode("a2V5==")
就足够了。
不知道你代码的架构,也许你可以使用以下架构:
A -> B -> C
A是你的客户端代码,A向B提交请求
B 是你的私人服务器上的代理代码,并且已经在 B 代码中编码了你的 api_key,B 代码会将你的带有 api_key 的 A 请求传输到 C
C为对外服务
那么,客户端代码永远不会记录api密钥,api密钥将在您的私人服务器上,这类似于代理设计模式。
当然,如果你不想那么复杂,你可以直接使用Py2exe将你的python代码打包成exe,这是另一种选择,仅供参考。
我正在编写一个 Python 程序,它使用 API 密钥从外部服务访问数据。该程序使用我的 Python 脚本中硬编码的密钥调用此服务。有没有一种方法可以在某种程度上保护这个密钥(不是不可逆的,而是一种防止人们直接从脚本中复制密钥的方法)?程序是否应该从我的服务器请求密钥?也许是 C 库?
Should the program request the key from my server?
即便如此,一个非常积极(或熟练,或两者兼而有之...)的用户也可以通过嗅探工具(例如 Wireshark(如果您未使用 https)或什至通过修改您的脚本来获取密钥只需在某处添加 print
。
如果你想保护自己免受 "Hackers" 的侵害,这是不可能的,因为如果 python 脚本可以访问你的 API,那么可以修改同一个脚本来做一些令人讨厌的事情具有访问权限的事物。你将不得不在那里找到另一个解决方案。
如果您想保护自己免受 "shoulder surfers"(路过时看着您的显示器的人)的伤害,那么 base64.b64encode("key")
和 base64.b64decode("a2V5==")
就足够了。
不知道你代码的架构,也许你可以使用以下架构:
A -> B -> C
A是你的客户端代码,A向B提交请求
B 是你的私人服务器上的代理代码,并且已经在 B 代码中编码了你的 api_key,B 代码会将你的带有 api_key 的 A 请求传输到 C
C为对外服务
那么,客户端代码永远不会记录api密钥,api密钥将在您的私人服务器上,这类似于代理设计模式。
当然,如果你不想那么复杂,你可以直接使用Py2exe将你的python代码打包成exe,这是另一种选择,仅供参考。