【发布时间】:2018-11-27 22:25:29
【问题描述】:
我构建了一个简单的 java 应用程序。但是,我不明白如何保护这个应用程序以避免反编译器无法显示的硬编码密码。
登录主界面
import java.util.Scanner;
public class LoginMain {
public static void main(String[] args) {
String Username;
String Password;
Password = "admin";
Username = "admin";
Scanner input1 = new Scanner(System.in);
System.out.println("Enter Username : ");
String username = input1.next();
Scanner input2 = new Scanner(System.in);
System.out.println("Enter Password : ");
String password = input2.next();
if (username.equals(Username) && password.equals(Password)) {
System.out.println("Access Granted! Welcome!");
} else if (username.equals(Username)) {
System.out.println("Invalid Password!");
} else if (password.equals(Password)) {
System.out.println("Invalid Username!");
} else {
System.out.println("Invalid Username & Password!");
}
}
}
LoginNew.java
import java.util.Scanner;
public class LoginNew {
public static void main(String[] args) {
String Username;
String Password;
Scanner scan = new Scanner (new File("1.txt"));
Scanner input1 = new Scanner(System.in);
System.out.println("Enter Username : ");
String username = input1.next();
Scanner input2 = new Scanner(System.in);
System.out.println("Enter Password : ");
String password = input2.next();
if (username.equals(Username) && password.equals(Password)) {
System.out.println("Access Granted! Welcome!");
} else if (username.equals(Username)) {
System.out.println("Invalid Password!");
} else if (password.equals(Password)) {
System.out.println("Invalid Username!");
} else {
System.out.println("Invalid Username & Password!");
}
}
}
但是,系统显示我:
loginNew.java:9: error: cannot find symbol
Scanner scan = new Scanner (new File("1.txt"));
^
symbol: class File
location: class loginNew
1 error
Error: Could not find or load main class loginNew
我使用我的凭据创建了文件 1.txt:Password = "admin"; 用户名 = "管理员";简单的东西,但我迷路了。对不起..
【问题讨论】:
-
请遵循Java命名约定:包、属性、变量、参数、方法必须以lowerCase开头,而类、接口应以UpperCase开头> && 不需要拆分声明和赋值,一行就可以搞定
-
解决方法:hash密码,只保留这个hash,然后输入passwd后,hash并比较是否相等。但是,如果您是“菜鸟”,则不应从此类问题开始,因为您可能没有构建需要此类安全性的应用程序;)
-
@azro OP 还应该对密码加盐以使其更安全。
-
@SamzSakerz 当然可以,但我认为引入太多东西只会增加混乱,如果概念是新的,那就从小处着手
-
你看到
String[] args了吗?它允许您在命令行上键入信息(例如,凭据)并在您的 Java 程序中读取它们。
标签: java