对于宠物项目,我开发了一个桌面应用程序,它需要来自几个不同Web服务的API密钥.
我一直在努力使这个应用程序变得开源,并解决了如何处理这些密钥的问题.
问题是:我的理解是,使用该应用程序或查看/修改源代码的任何人都不应该看到这些API密钥.从Web服务端,这些API密钥用于识别访问其API的应用程序,并允许/阻止使用.在用于接收这些密钥的大多数服务条款中,实际上明确指出密钥不得与世界共享.
目前我的所有密钥都是硬编码的,但是我在如何处理开源应用程序中私钥的情况方面陷入僵局:
- 如果密钥仍然是硬编码的,一旦我的源代码就会公开显示.
- 我不能用代码分发中的密钥省略源文件,因为它不会编译.这在技术上解决了这个问题,但引入了一个新的,不可接受的问题.
- 如果我将密钥推送到.ini或其他配置文件,并且根本不在我的公共代码存储库中包含该文件,它仍然必须与我的应用程序的二进制文件一起分发,以便应用程序运行,所以我的密钥将在应用程序分发中显示,而不是源代码分发.没有改善.我试图在这个INI文件中使用的任何加密体操都会增加试图修改我的代码的人的复杂性.
因此,关于我的代码库(目前在Mercurial下用于版本控制),管理所有内容的最佳方法是什么,以便代码可以公开,但我的密钥保持私密?