2016-12-01 35 views
0

我需要一些關於如何使用密碼提示用戶輸入密碼的說明。我一直在爲此工作了幾天,這是爲了我的大學決賽項目,我認爲這是一個很好的Java初學者加入安全加密的步驟,因爲如果我繼續構建這個程序,我可以創建一系列的密鑰得到一個主文件。意見表示讚賞,並且我將在成功登錄前添加一個提示,詢問用戶是否確定要在某個時間點登錄。如何爲我的密鑰驗證系統添加文件上傳提示?

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.PrintStream; 
import java.util.Scanner; // Needed for the Scanner class 

public class TxtKeyVerifier { 

public static void main(String[] args) throws FileNotFoundException { 

    File keyfile = new File("key2.txt"); 


    Scanner sc = new Scanner(keyfile); 


    Scanner keyboard = new Scanner(System.in); //<<<--- 
    String input; 

    System.out.print("Please enter your password: "); //<<--- 
    input = sc.nextLine(); 

if (authenticate1(input)) { 

     System.out.println("This program is working if this text is found within outputfile.txt."); 

     File outputfile = new File("outputfile.txt"); 
     FileOutputStream fos = new FileOutputStream(outputfile); 
     PrintStream ps = new PrintStream(fos); 
     System.setOut(ps); 
     System.out.println("This program is working if this text is found within outputfile.txt."); 

}else if (authenticate2(input)) { 

     System.out.println("It works."); 

}else{ 
System.out.println("Error: Wrong password."); 
} 
} 

private static boolean authenticate1(String password1) { 

    return ((password1.length() == 6) 
      && (password1.matches("beep11")) 
      && (password1.matches("beep11")) 
      && (password1.matches("beep11"))); 
} 

private static boolean authenticate2(String password2) { 

      return ((password2.length() == 6) 
      && (password2.matches("beep22")) 
      && (password2.matches("beep22")) 
      && (password2.matches("beep22"))); 
} 
} 
+0

不確定你在問什麼?你想有一個用戶輸入的文件路徑? –

+0

是的,我希望用戶輸入是一個.txt文件,其中包含我的密碼。 – NumaNuma

+0

像這樣的東西http://stackoverflow.com/questions/3309899/how-to-pass-a-text-file-as-a-argument或http://stackoverflow.com/questions/13185727/readinga-a- txt-file-using-scanner-class-in-java –

回答

0

您將需要通過用戶的輸入來讀取文件掃描儀。我已經調整了幾行代碼來執行此操作。看看這是否有幫助。

public class TxtKeyVerifier { 

    public static void main(String[] args) throws FileNotFoundException { 

    Scanner keyboard = new Scanner(System.in); 
    JFileChooser fileChooser = new JFileChooser("."); 
    fileChooser.showOpenDialog(null); 
    File keyfile = fileChooser.getSelectedFile(); 

     Scanner sc = new Scanner(keyfile); 
     String input = sc.nextLine(); 

     if (authenticate1(input)) { 

      System.out.println("This program is working if this text is found within outputfile.txt."); 

      File outputfile = new File("outputfile.txt"); 
      FileOutputStream fos = new FileOutputStream(outputfile); 
      PrintStream ps = new PrintStream(fos); 
      System.setOut(ps); 
      System.out.println("This program is working if this text is found within outputfile.txt."); 

     } else if (authenticate2(input)) { 

      System.out.println("It works."); 

     } else { 
      System.out.println("Error: Wrong password."); 
     } 
     sc.close(); 
     keyboard.close(); 
    } 

    private static boolean authenticate1(String password1) { 

     return ((password1.length() == 6) && (password1.matches("beep11")) && (password1.matches("beep11")) 
       && (password1.matches("beep11"))); 
    } 

    private static boolean authenticate2(String password2) { 

     return ((password2.length() == 6) && (password2.matches("beep22")) && (password2.matches("beep22")) 
       && (password2.matches("beep22"))); 
    } 
} 
+0

偉大的答案,我甚至非常喜歡你編輯之前的答案,Anacron。通過輸入密鑰文件路徑進行登錄是設計實際加密登錄系統的一個很好的開始。 – NumaNuma

+0

哈哈..我看到你在你的評論中發佈了這個:'用'選擇文件'窗口提示用戶,'。所以,我編輯了答案。 __:)__你想讓我恢復到以前的答案嗎? – anacron

0

您想使用FileChooser在這種情況下JFileChooser從擺動包。

從文檔

JFileChooser爲用戶選擇文件的簡單機制。有關使用JFileChooser的信息,請參閱The Java Tutorial中的「如何使用文件選擇器」一節。 下面的代碼會彈出用戶的主目錄的文件選擇器,只看到jpg和.gif圖片:

JFileChooser chooser = new JFileChooser(); 
FileNameExtensionFilter filter = new FileNameExtensionFilter(
    "JPG & GIF Images", "jpg", "gif"); 
chooser.setFileFilter(filter); 
int returnVal = chooser.showOpenDialog(parent); 
if(returnVal == JFileChooser.APPROVE_OPTION) { 
    System.out.println("You chose to open this file: " + 
     chooser.getSelectedFile().getName()); 
} 

隨着FileChooser你會得到的路徑。將文件的路徑傳遞給您的掃描儀並繼續您的現有代碼。關於技術可能性的完整指南可以在Oracle: How to Use File Choosers

希望這會有所幫助。

+0

謝謝Murat K.它確實有幫助! – NumaNuma