2016-12-09 4 views
0

Ich mache ein Verschlüsselungsprogramm, das Wörter verschlüsselt, die der Benutzer eingibt, ich habe alles funktioniert, außer die Ausgabe des verschlüsselten Wortes, das eingegeben wurde. Hier ist, was mein Code sieht aus wie jetzt:Verschlüsseln einer Benutzereingabe

Klasse 1

public class Encryption { 

    String encrypt = "test"; 
    String key; 
    String message; 
    String alpha; 
    Encryption(){ 
     encrypt = Encrypt(); 
    } 
    private String Encrypt(){ 

     String[] alphabet = { 
       "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , 
       "n" , "o" , "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" 

     }; 


     StringBuilder sbAlphabet = new StringBuilder(); 

     for (int i = 0; i <= 25; i++) { 
      sbAlphabet.append(alphabet[i]); 
     } 
     alpha = sbAlphabet.toString(); 
     return encrypt; 
    }   
} 

Klasse 2

package encryption; 

import java.util.Random; 

public class Key { 

    String key; 

    Key() { 
     key = genKey(); 
    } 
    private String genKey() { 

     String[] scrambled = { 
      "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , 
      "n" , "o" , "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" 

     }; 

     int r; 
     String temp; 
     String key; 
     StringBuilder sbScrambled = new StringBuilder(); 

     for (int i = 0; i <= 25; i++) { 
      r = (int)(25*Math.random() + 1); 
      temp = scrambled[i]; 
      scrambled[i] = scrambled[r]; 
      scrambled[r] = temp; 
     } 
     for (int i = 0; i <= 25; i++) { 
      sbScrambled.append(scrambled[i]); 
     } 
     key = sbScrambled.toString(); 
     return key; 
    } 
} 

Klasse 3

package encryption; 

import java.util.Scanner; 

public class Message { 
    Key key = new Key(); 
    Encryption encrypt; 
    String message; 

    Message() { 
     System.out.println("Please enter an input:"); 
     Scanner user_input = new Scanner(System.in); 
     message = user_input.next(); 
     encrypt = new Encryption(); 
    } 

    public static void main(String[] args) { 

     Message message = new Message();   
     System.out.println(message.key.key); 
     System.out.println(message.encrypt.alpha); 
    } 

} 

Die Verschlüsselungs-Klasse gibt das Alphabet, die Key-Klasse verschlüsselt das Alphabet nach dem Zufallsprinzip und zeigt es dann an, und die Message-Klasse zeigt den verschlüsselten Schlüssel und das Alphabet an der Benutzer. Heres ein Beispiel, wie es aussieht, wenn Sie es ausführen:

Please enter an input: 

wew lad 

mbptwuklhanjrsedzqfcyvxogi 

abcdefghijklmnopqrstuvwxyz 

Was ich den Code zu machen bin versucht, den Benutzer Eingang im verschlüsselten Alphabet tun ist, angezeigt werden, so würde es so aussehen:

Please enter an input: 

wew lad 

xwx jmt 

mbptwuklhanjrsedzqfcyvxogi 

abcdefghijklmnopqrstuvwxyz 

Antwort

1

um Ihre Frage zu beantworten:

Sie benötigen message innerhalb von Message() in die Verschlüsselungs-Klasse übergeben und von dort einer Schleife durch alle Zeichen und ersetzen Sie den message Charakter mit dem entsprechenden Betrag in dem s verkrampftes Alphabet. Zum Beispiel Zeichen A Sie würden mit scrambled[0] ersetzen.

Um dies zu tun, müssen Sie sich eine ASCII Table ansehen, um die numerische Darstellung zu sehen. Und dann so etwas wie:

public String encryptText(String message) { 
    message = message.toLowerCase(); 
    String encryptedMessage = ""; 
    for(int i = 0; i < message.length; i++) { 
     encryptedText += scrambled[message[i] - 'a' + 1]; 
    } 
    return encryptedMessage; 
} 

das gesagt ist, würde ich empfehlen, alles zu löschen, die Sie gerade gemacht haben. Wenn es um die Verschlüsselung geht, sollten Sie nicht versuchen, ein eigenes Protokoll zu erstellen, es sei denn, Sie wissen wirklich, was Sie tun.

Hier ist ein einfaches Beispiel dafür, was Sie tun sollten, https://stackoverflow.com/a/4487541/1327636

Was Sie tun, eine Substitutions-Chiffre ist, die zu knacken ist nicht sehr schwierig. Die Art und Weise Substitution Chiffren zu Rissbildung ist durch:

  • Zählen der Häufigkeit der Buchstaben in Ihrem verschlüsselten Text und auf eine für sich wiederholende Zeichen letter frequency table

  • Blick zu vergleichen, ex.ZZ

  • Mit Blick auf die Länge der Wörter und Vergleichen der verschlüsselten String Zeichen der Frequenztabelle beliebte Wörter wie The

  • der Suche nach sich wiederholende Muster wie ING, TH, ION

zu finden

Wenn Sie nur diese vier Dinge verwenden, können Sie eine sehr gute statistische Wahrscheinlichkeit beim Cracken von Substitutionscodes erhalten. Wenn Sie mehr über sie lesen möchten, würde ich über here.

+0

schauen Ich kann mir vorstellen, dass diese Methode nicht sehr sicher ist, aber ich nehme einen Anfänger-Java-Kurs und ich soll das Projekt auf diese Weise tun. –

+0

Ich habe gerade meine Post editiert, um zu beschreiben, wie man erreicht, was man will, und warum es eine schlechte Methode der Verschlüsselung ist. Ich nahm an, dass dies entweder für Hausaufgaben/persönliches Projekt war. – user123

Verwandte Themen