【问题标题】:How to hide password within JAR file如何在 JAR 文件中隐藏密码
【发布时间】:2019-08-18 19:55:41
【问题描述】:

我正在尝试制作一个需要密码的 Java 程序。问题是Java 类或JAR 文件可以转换回源代码,因此人们可以通过将程序转换回源代码来查看密码。我该如何解决这个问题?

【问题讨论】:

  • 为什么你的罐子里面有密码?没有办法保护密码。
  • 如果我不将密码存储在 JAR 中,那么我应该将它存储在哪里? (我还在学习编程)
  • 密码是什么?可能是为了访问 something 一个网络。为此,您通常有两种选择:使服务对所有人(知道它的人)开放,或者具有每个用户的身份验证(通过选择的密码、客户端证书或......)。在 jar 中拥有 one 密码违背了密码的目的,因为现在“每个人”都拥有它,可以使用它,这意味着您可以从一开始就跳过它。在客户端 PC 上存储该用户凭据是一个完全不同的主题。

标签: java jar passwords password-encryption


【解决方案1】:

保护密码的最好方法可能是使用one-way hash。我建议调查Secure Hash Algorithms (SHA)。这些是单向散列(又名cryptographic checksums),出于所有实际目的,为某些给定文本或消息生成唯一散列。将哈希值存储在 JAR 文件中,并使用相同的算法对输入的密码进行哈希处理。将该哈希值与存储的哈希值进行比较以进行验证。

这样做的缺点是更改密码并不容易(或在某些情况下可能)。

为不同的输入生成相同散列的几率非常小。

这是使用标准 Java 库完成的一种方法。

      MessageDigest md = MessageDigest.getInstance("SHA-256");
      String password = "Password"; // password to be "stored"
      byte[] bytes = password.getBytes();

      md.update(bytes);
      byte[] digest = md.digest();

      // store the following string in the jar file
      String storedDigest = toHex(digest);

      // validation process
      String enteredPassword = "Password";
      md.update(enteredPassword.getBytes());
      System.out.println(toHex(md.digest()).equals(storedDigest) ? "Passed"
            : "Failed");

   //Convert array of bytes to a long hex string
   public static String toHex(byte[] digest) {
      StringBuilder sb = new StringBuilder();
      for (byte b : digest) {
         sb.append(Integer.toHexString((b >> 4) & 0xF));
         sb.append(Integer.toHexString(b & 0xF));
      }
      return sb.toString();
   }

【讨论】:

    【解决方案2】:

    你不能。

    即使您加密了密码,解密密码的代码也将可用,因此不会阻止有人反编译您的应用程序。

    你有一些选择:

    • 将您的密码放入环境变量中(可通过System.getProperty("variable.name") 访问)
    • 将密码存储在文件中(仍然不是很好,但比来源更好)
    • 从服务器访问密码,但是,您仍然需要让用户输入他们对服务器的凭据,现在您遇到了同样的问题。
    • 让用户在每次运行应用程序时都输入密码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 2019-12-01
      • 2016-09-21
      • 1970-01-01
      • 2020-05-14
      • 2017-07-29
      相关资源
      最近更新 更多