Hide string in open-source code?
我已经在Java项目上工作了一段时间,在我公开下载之前,我想添加一个要求我连接到MySQL数据库的特性。我的问题很简单:如果代码是开源的,我该如何隐藏数据库的密码呢?
- 您希望代码的用户直接连接到数据库服务器,而不是他们自己设置的MySQL实例?你能详细说明这是什么类型的功能吗?一个可能的替代解决方案是支持一个可供用户连接和控制的RESTful Web服务,而不向任何人公开您的数据库服务器吗?
将数据库连接设置与代码分开存储。
- 我如何准确地将其存储为不可读的格式?
- 将应用程序的配置与代码分开。当用户部署文件时,让他们提供配置。你不需要用那种方式来制造混乱。
- 和中一样,用户是否导入了单独的文件?如果可能的话,我宁愿把整个文件保存在一个文件中。
- 不,给他们一些编辑配置的机制,让他们在部署应用程序时对其进行编辑。
- 请注意,如果Java内置了某种配置系统,您可以使用它,而不用担心配置文件。可以让Java运行时处理这个责任。
- 如果我在代码中包含密码的加密版本,然后让程序从Web服务器请求加密密钥,它会工作吗?
- @可能是龙卡,但为什么要麻烦呢?阻止用户设置调试代理(如fiddler)并监视密码返回的方法是什么?只需创建一个Web服务来处理发送/接收数据。我认为您应该重新思考为什么需要从客户机连接到MySQL数据库。
据我所知,没有正确的答案。你可以很努力地混淆或隐藏它,但是如果密码或计算密码的方法在你的jar中,一个持久且熟练的用户会找到它。
这里有一个比我能给出的更好的答案:如何保护MySQL用户名和密码不被反编译?
- 我有点困惑。如果我使用代码preferences.put("db_username", username); preferences.put("db_password", password);,凭证是否仍然硬编码到二进制文件中?
您可以将密码放在某种类型的configuration file文件中,比如ini文件。在安装/安装阶段,从用户那里获取密码并通过代码将其填充到配置文件中,或者允许他们手动执行。
- 我不太明白…我想我应该提到我的代码是一个独立的JAR。