我构建了一个简单的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:密码=“ admin”; 用户名=“管理员”;简单的东西,但我输了。抱歉。
答案 0 :(得分:3)
通常,密码甚至都不会存储在应用程序代码中-会针对数据库或其他数据源对密码进行验证。但是暂时把这些担忧抛在一边...
您的问题的答案是使用one-way hash。也就是说,使用不可逆的哈希函数对密码进行加密。当用户输入密码时,对其进行哈希处理并将其与应用程序代码中存储的哈希进行比较。 (将match_all['home_away_goal_diff'] = match_all['home_team_goal'] - match_all['away_team_goal']
变量替换为password
变量。)由于无法(轻松)解密哈希,因此比将纯文本密码存储在应用程序源(或数据库或无论您在何处存储哈希密码)。
正如其他人所暗示的那样,加密哈希(和应用程序安全性)可能会很快变得复杂,并且对于初学者而言并不是特别友好。因此,此答案可能有助于您理解一些概念,但可能需要更多的知识来保护生产质量的应用程序。