程序中的秘密信息

时间:2015-07-02 08:09:53

标签: java password-protection secret-key

所以我在Programmers SE上阅读{{3}},我有点困惑。简而言之,解决方案是将所有机密信息保存在配置文件中。现在这是我感到困惑的地方。用户无法搜索此文件吗?

使用哪些方法阻止用户查找文件?我在Windows上使用Java,如果它改变了答案。

我认为加密会出现,但我不确定如果用户可以反编译您的来源有多大帮助。

编辑:为了进一步澄清,我的目的是在可执行的JAR文件中使用API​​密钥(在本例中为1,单一密钥)。

3 个答案:

答案 0 :(得分:0)

这取决于您要实现的目标。我将在此假设用户可以访问运行软件的环境。如果您需要存储一些秘密信息,那么您可以使用加密,用户必须提供密钥。这很难自己正确实现,但是有很多库和资源。

如果您的问题与程序员SE中描述的完全相同 - 您希望在不共享“秘密”设置的情况下共享代码 - 将设置提取到配置文件中,并且不共享配置文件。你可以提供一个模板,但缺少秘密。

答案 1 :(得分:0)

阅读了您提供的链接后,我可以考虑以下内容。另外,请随时查看Security network (one interesting question here)

对于数据库配置文件中的示例,您可以使用

之类的条目
<%= ENV['USER_NAME'] %>
<%= ENV['PASSWORD'] %>

并且这两个变量是您设置的环境变量。

使用加密类似。您将加密/哈希密钥存储在配置文件中,并在需要时使用该数据查看是否存在匹配。

  • 可以使用相应的密钥
  • 解密加密数据
  • 密码散列数据非常难以破解

您需要根据您的要求进行适当的设计。

如果您愿意,也可以结合使用这两种方法。

实施例

我邀请您查看我的GitHub project's config folder。特别是yaml文件。我主要使用上面的第一种方法。这是一个RoR项目。

答案 2 :(得分:0)

如果最终用户可以获得某些信息,您就无法真正保护您的信息 - 即使它们以某种方式加密,只要您的软件在客户端上也可用。它只取决于攻击者为获得它们而投入的犯罪能量。

一种可能性是使用ie。连接池用于数据库连接。

使用这种技术,您可以在不知道密码的情况下远程获取连接对象 - 因此您可以在应用程序中使用连接,但用户无法使用信息通过某些sql工具连接到数据库。

详情请见此处:https://en.wikipedia.org/wiki/Connection_pool