Java 如何在JAR文件中隐藏密码
我正在尝试制作一个需要密码的Java程序。问题是Java类或JAR文件可以转换回源代码,因此人们可以通过将程序转换回源代码来查看密码。我怎样才能解决这个问题?你不能 即使您加密了密码,用于解密密码的代码也将在中可用,因此不会阻止有人反编译您的应用程序 您有一些选择:Java 如何在JAR文件中隐藏密码,java,jar,passwords,password-encryption,Java,Jar,Passwords,Password Encryption,我正在尝试制作一个需要密码的Java程序。问题是Java类或JAR文件可以转换回源代码,因此人们可以通过将程序转换回源代码来查看密码。我怎样才能解决这个问题?你不能 即使您加密了密码,用于解密密码的代码也将在中可用,因此不会阻止有人反编译您的应用程序 您有一些选择: 将密码放入环境变量中(可通过System.getProperty(“variable.name”)访问) 将密码存储在文件中(仍然不是很好,但比源代码更好) 从服务器访问密码,但是,您仍然需要让用户为服务器输入他们的凭据,现在您仍
- 将密码放入环境变量中(可通过
访问)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上存储用户凭据是一个完全不同的主题。只需忽略否决票。这是一个众所周知的和公认的方法,记录在有关密码保护的文章和教科书中。