2017-11-17 1 views
0

Ich bin ein Login-Programm, mit dem Sie ein Passwort und Benutzernamen in zwei separaten Dateien (entsprechend benannt) und speichern können. Mein Problem ist, dass ich nicht herausfinden kann, wie man einen Benutzernamen auf ein Passwort setzt. Bsp .: Benutzername ist Bob, Passwort ist cat, und der Benutzer muss Bob als Benutzernamen und die Katze als Passwort eingeben oder sonst gibt es einen Fehler (wenn der Benutzer den Benutzernamen als Rechnung und das Passwort als Katze eingibt, sollte er dies erkennen der Benutzername ist nicht mit dem entsprechenden Passwort verbunden). Jede Hilfe wäre nett. * Ich habe den Benutzername Teil noch nicht hinzugefügt, da es das gleiche wie das Passwort Teil strukturiert ist, brauche ich nur die Benutzername mit dem Kennwort entsprechen, so dass der Benutzer nicht einen anderen Benutzername mit dem gleichen PasswortJAVA Vereinen Sie einen Benutzernamen mit einem Passwort für Login-Programm

Hier kann meine Code, den ich bisher für eine Referenz habe:

import java.io.File; 
import java.io.PrintStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.io.FileReader; 
import java.io.*; 
import java.util.*; 
import javax.swing.JOptionPane; 
public class PassCode 
{ 
    static String adminPassword = "Change Password"; 
    public static void fileMaker() throws IOException 
    { 
     PrintStream standard = System.out; 
     File f = new File("Password.txt"); 
     FileOutputStream fs= new FileOutputStream(f); 
     PrintStream ps = new PrintStream(fs); 
     System.setOut(ps); 
     String theMessage = "Set New Password"; 
     String userInput = JOptionPane.showInputDialog(theMessage); 
     System.out.println(userInput); 
     ps.close(); 
     System.setOut(standard); 
    } 
public static void Checker() throws IOException 
    { 
     Scanner inputStream = new Scanner(new FileReader("Password.txt")); //Scans declared file for text on the first line 
     String fileChecker = inputStream.nextLine(); //Sets scanned line into a string variable 
     if(fileChecker.isEmpty()) 
     { 
      fileMaker(); 
     } 
     else 
     { 
     int reply = JOptionPane.showConfirmDialog(null, "Would you like to change the current password", "Warning!", JOptionPane.YES_NO_OPTION); 
     if (reply == JOptionPane.YES_OPTION) 
      { 
       String inquire = "Type Administrator Password to Proceed"; 
       boolean flag = true; 
       while(flag == true) 
      { 
       String confirm = JOptionPane.showInputDialog(inquire); 
      if(confirm.equals(adminPassword)) 
      { 
       fileMaker(); 
       flag = false; 
      } 
      else 
      { 
       inquire = "Incorrect!" + "\n" + "Retry"; 
      } 
      } 
     } 
     } 
    } 
    public static void main(String[] args) throws IOException 
    { 
     Checker(); 
     Scanner inputStreamThree = new Scanner(new FileReader("Password.txt")); 
     String line = inputStreamThree.nextLine(); 
     String question = "Password Please"; 
     Boolean right = true; 
     while(right == true) 
     { 
      String ask = JOptionPane.showInputDialog(question); //Asks for user to input password 
     if(ask.equals(adminPassword)) //Checks if user input the admin password 
     { 
      fileMaker(); 
      Scanner inputStreamAdmin = new Scanner(new FileReader("Password.txt")); //Scans for admin password 
      String adminChecker = inputStreamAdmin.nextLine(); //Sets scanned line as a new string variable 
      line = adminChecker; 
     } 
     else if(line.equals(ask)) //Checks if user password is correct 
     { 
      System.out.println("Welcome Fellow Programmer to the Now Functioning Password Checker!" + 
       "\n" + "Date Today: 10/31/2017" + 
       "\n\n\n\n\n\n\n" + "Did you figure out the Admin password yet?"); 
      right = false; 
     } 
     else if(ask != line) //Checks if user password is incorrect 
      { 
       question = "Incorrect Password!"; 
      } 
     } 
    } 
} 
+0

Ist mit zwei verschiedenen Dateien eine Anforderung? –

+0

Es ist bevorzugt, aber wenn es einen anderen Weg gibt, wäre es in Ordnung. Außerdem wollte ich zwei verschiedene Dateien verwenden, um sowohl die Passwörter als auch die Benutzernamen getrennt zu speichern. –

Antwort

0

Wenn beiden Benutzername und Passwort in der gleichen Zeilennummer befinden sich in ihrer jeweiligen Datei, dann sollte es möglich sein, das richtige Passwort für einen bestimmten Benutzer abzuziehen.

Beispiel:

Username.txt      Password.txt 
bob        cat 
alice        rabbit 
victor        salmon 

Wenn Sie den Benutzernamen suchen, zählen die Zeile lesen, bis Sie den Benutzernamen finden. Lesen Sie dann in der Passwortdatei die Anzahl der Zeilen und rufen Sie den Passwortwert ab. Dann vergleiche!

Ich nehme an, dies ist akademische Arbeit, weil das Speichern von Passwort in Dateien klar ist eine große Sicherheitslücke und sollte nie auf professionelle Projekt erlaubt sein.

+0

Ich werde das versuchen! Das scheint die Antwort zu sein, nach der ich suche. P.S. Das ist akademische Arbeit, ich wollte nur ein einfaches Programm erstellen, um zu verstehen, wie ein grundlegendes Login-Programm funktioniert und es dann entsprechend den Fehlern zu optimieren (was sehr offensichtlich ist, da es sich um ein Programm zum Unterrichten handelt). –

0

Ich nehme an, dass Sie nur einzelne Login verwenden, aber in 2 Dateien Password.txt und Username.txt gespeichert.

Unten sind meine 10-Minuten-Codes, so müssen Sie möglicherweise geändert werden, wenn Fehler oder Fehler erhalten.

import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.util.Scanner; 

import javax.swing.JOptionPane; 

public class PassCodeA { 

    public static void main(String[] args) 
    { 
     Scanner usernameFile = null; 
     try { 
      usernameFile = new Scanner(new FileReader("Username.txt")); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      JOptionPane.showMessageDialog(null, "Username File Missing", "File Missing", JOptionPane.CLOSED_OPTION); 
      return; 
     } 

     Scanner passwordFile = null; 
     try { 
      passwordFile = new Scanner(new FileReader("Password.txt")); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      JOptionPane.showMessageDialog(null, "Password File Missing", "File Missing", JOptionPane.CLOSED_OPTION); 
      return; 
     } 

     String usernameInput = JOptionPane.showInputDialog(null,"Please Enter Username", "Username", JOptionPane.OK_CANCEL_OPTION); 
     String passwordInput = JOptionPane.showInputDialog(null,"Please Enter Password", "Username", JOptionPane.OK_CANCEL_OPTION); 
     System.out.println(usernameInput); 

     boolean usernameFound = false; 
     while(usernameFile.hasNextLine()){ 
      final String lineFromFile = usernameFile.nextLine(); 
      if(lineFromFile.equals(usernameInput)){ 
       usernameFound = true; 
       break; 
      } 
     } 
     if (usernameFound == false) { 
      JOptionPane.showMessageDialog(null, "Username not found", "Username Not Found", JOptionPane.CLOSED_OPTION); 
      return; 
     } 

     boolean passwordFound = false; 
     while(passwordFile.hasNextLine()){ 
      final String lineFromFile = passwordFile.nextLine(); 
      if(lineFromFile.equals(passwordInput)){ 
       passwordFound = true; 
       break; 
      } 
     } 

     if (passwordFound == false) { 
      JOptionPane.showMessageDialog(null, "Password not found", "Password Not Found", JOptionPane.CLOSED_OPTION); 
      return; 
     } 

     JOptionPane.showMessageDialog(null, "Thank you for login", "Success", JOptionPane.CLOSED_OPTION); 


    } 



} 

Wenn Sie mehrere Anmeldeinformationen in beiden Dateien hatten. Sie sollten LineNumberReader anstelle von Scanner verwenden. So können Sie mit der Zeilennummer für beide Dateien übereinstimmen.

+0

Ich werde das auch morgen versuchen und sehen, welche Ergebnisse es ergibt. Danke für deinen Beitrag. –

0

Ich habe einen Weg gefunden, LineNumberReader (LNR) zu implementieren und lassen Sie das Programm überprüfen, ob die Zeilennummern für den Benutzernamen und das Passwort identisch sind. Ich benutzte eine separate Methode und nannte sie in der Hauptmethode. Ich habe den Code getestet und es funktionierte mit mehreren Benutzernamen und Passwort-Informationen in beiden Dateien. Ich weiß, das ist auch chaotisch, aber ich wollte zuerst die Funktionalität. Dann werde ich es entsprechend optimieren. Ich kann den ganzen Code nicht hochladen, da es zu groß für den gegebenen Platz ist. Hier

ist der Code, den ich hinzugefügt (nur die Methode mit der LNR):

public static void reader() throws IOException 
    { 
     JTextField username = new JTextField(); 
     JTextField password = new JPasswordField(); 
     Object[] message = { 
      "Username:", username, 
      "Password:", password 
      }; 

     int option = JOptionPane.showConfirmDialog(null, message, "Login", JOptionPane.OK_CANCEL_OPTION); 


     boolean right = true; 

     while(right == true) 
     { 
     int u = 0; 
     String userCheck; 
     FileReader ur = null; 
     LineNumberReader lnru = null; 

     try { 

     ur = new FileReader("username.txt"); 
     lnru = new LineNumberReader(ur); 

     while ((userCheck = lnru.readLine()) != null) 
     { 
      if (userCheck.equals(username.getText())) 
      { 
       break; 
      } 
      else 
      { 
       u = lnru.getLineNumber(); 
      } 
     } 
     } catch(Exception e) 
     { 
      e.printStackTrace(); 
     } finally { 
       if(ur!=null) 
        ur.close(); 
       if(lnru!=null) 
        lnru.close(); 
      } 

     int p = 0; 
     String passCheck; 
     FileReader pr = null; 
     LineNumberReader lnrp = null; 

     try { 

     pr = new FileReader("Password.txt"); 
     lnrp = new LineNumberReader(pr); 

     while ((passCheck = lnrp.readLine()) != null) 
     { 
      if (passCheck.equals(password.getText())) 
      { 
       break; 
      } 
      else 
      { 
       p = lnrp.getLineNumber(); 
      } 
     } 
    } catch(Exception e) 
     { 
      e.printStackTrace(); 
     } finally { 

      if(pr!=null) 
       pr.close(); 
      if(lnrp!=null) 
       lnrp.close(); 
     } 

     if (option == JOptionPane.OK_OPTION) 
     { 
     if(password.getText().equals(adminPassword)) //Checks if user input the admin password 
     { 
      passMaker(); 
      Scanner inputStreamAdmin = new Scanner(new FileReader("Password.txt")); //Scans for admin password 
      String adminChecker = inputStreamAdmin.nextLine(); //Sets scanned line as a new string variable 
      //lineFromFile = adminChecker; 
     } 
     else if(p == u) //Checks if username and password are correct 
     { 
      System.out.println("Welcome Fellow Programmer to the Now Functioning login program!" + "\n" + "Date Today: 10/31/2017" + "\n\n\n\n\n\n\n" + "Did you figure out the Admin password yet?"); 
      right = false; 
     } 
     else //Checks if user password is incorrect 
      { 
       option = JOptionPane.showConfirmDialog(null, message, "Login Failed Try Again", JOptionPane.OK_CANCEL_OPTION); 
      } 
     } 
    } 
    } 
Verwandte Themen