Java 如何在JAR文件中隐藏密码

Java 如何在JAR文件中隐藏密码,java,jar,passwords,password-encryption,Java,Jar,Passwords,Password Encryption,我正在尝试制作一个需要密码的Java程序。问题是Java类或JAR文件可以转换回源代码,因此人们可以通过将程序转换回源代码来查看密码。我怎样才能解决这个问题?你不能 即使您加密了密码,用于解密密码的代码也将在中可用,因此不会阻止有人反编译您的应用程序 您有一些选择: 将密码放入环境变量中(可通过System.getProperty(“variable.name”)访问) 将密码存储在文件中(仍然不是很好,但比源代码更好) 从服务器访问密码,但是,您仍然需要让用户为服务器输入他们的凭据,现在您仍

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

你不能

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

您有一些选择:

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

    • 保护密码的最佳方法可能是使用
      单向散列。我建议调查
      安全哈希算法(SHA)
      。这些是单向散列(也称为
      加密校验和
      ),用于所有实际目的,为某些给定文本或消息生成唯一的散列。将散列存储在JAR文件中,并使用相同的算法对输入的密码进行散列。将该散列与存储的散列进行比较以进行验证

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

      为不同的输入生成相同哈希的几率是无穷小的

      这里是一种使用标准Java库实现的方法

      MessageDigest md=MessageDigest.getInstance(“SHA-256”);
      字符串password=“password”;//要“存储”的密码
      字节[]字节=密码。getBytes();
      md.update(字节);
      字节[]摘要=md.digest();
      //在jar文件中存储以下字符串
      字符串storedDigest=toHex(摘要);
      //验证过程
      输入的字符串Password=“Password”;
      md.update(enteredPassword.getBytes());
      System.out.println(toHex(md.digest()).equals(storedDigest)?“已通过”
      :“失败”);
      //将字节数组转换为长十六进制字符串
      公共静态字符串toHex(字节[]摘要){
      StringBuilder sb=新的StringBuilder();
      for(字节b:摘要){
      sb.append(Integer.toHexString((b>>4)&0xF));
      sb.append(Integer.toHexString(b&0xF));
      }
      使某人返回字符串();
      }
      
      为什么您的jar中有一个pw?没有办法保护密码。如果我不将密码存储在JAR中,那么我应该将其存储在哪里?(我还在学习编程)密码是什么?可能是为了访问某个网站。为此,您通常有两种选择:让服务对所有人开放(知道它的人)或对每个用户进行身份验证(通过achosen密码或客户端证书或…)。在jar中有一个密码会破坏密码的用途,因为现在“每个人”都有它,可以使用它,这意味着你可以从一开始就跳过它。在客户端pc上存储用户凭据是一个完全不同的主题。只需忽略否决票。这是一个众所周知的和公认的方法,记录在有关密码保护的文章和教科书中。