替换硬编码的凭证

时间:2018-11-27 22:25:30

标签: java

我构建了一个简单的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”; 用户名=“管理员”;简单的东西,但我输了。抱歉。

1 个答案:

答案 0 :(得分:3)

通常,密码甚至都不会存储在应用程序代码中-会针对数据库或其他数据源对密码进行验证。但是暂时把这些担忧抛在一边...

您的问题的答案是使用one-way hash。也就是说,使用不可逆的哈希函数对密码进行加密。当用户输入密码时,对其进行哈希处理并将其与应用程序代码中存储的哈希进行比较。 (将match_all['home_away_goal_diff'] = match_all['home_team_goal'] - match_all['away_team_goal'] 变量替换为password变量。)由于无法(轻松)解密哈希,因此比将纯文本密码存储在应用程序源(或数据库或无论您在何处存储哈希密码)。

正如其他人所暗示的那样,加密哈希(和应用程序安全性)可能会很快变得复杂,并且对于初学者而言并不是特别友好。因此,此答案可能有助于您理解一些概念,但可能需要更多的知识来保护生产质量的应用程序。