2016-11-10 2 views
0

Ich habe eine Textdatei, die ich schon mit shifting verschlüsselt habe, aber ich muss den verschlüsselten Text wieder verschlüsseln, aber dieses Mal mit vigenere Chiffre. Ich muss dann den verschlüsselten Text entschlüsseln (zuerst vigenere, dann verschieben), aber alle Groß- und Kleinbuchstaben müssen gleich bleiben, ebenso wie die schwarzen Leerzeichen, Anführungszeichen, Kommata und Punkte. Ich habe bereits die Verschiebung Verschlüsselung und Entschlüsselung abgeschlossen, alles, was übrig bleibt, ist der Vigenere. Unten ist meine Klasse zum Verschlüsseln von Vigenere gezeigt, ich habe die Entschlüsselung noch nicht geschrieben, weil ich im Verschlüsselungsschritt feststeckte. Danke.Versucht, eine vigenere Chiffre zu verschlüsseln und zu entschlüsseln

public static String vigenereEncryption(String str,String keyword) 
{ 
char [] c_arr = null; 
int g =0; 
int keyLength = keyword.length(); 
String encrypted = ""; 
String update =""; 
String []list = null; 
for(int k = 0; k<keyword.length();k++){ 
char key = keyword.charAt(k); 
c_arr = keyword.toCharArray(); 
update = update + key; 
} 
for(int i=0;i<str.length();i++) 
{ 



    //stores ascii value of character in the string at index 'i' 
    int c=str.charAt(i); 
    //encryption logic for uppercase letters 

    if(Character.isUpperCase(c)) 
    { 
     for(int k = 0; k<keyword.length();k++){ 
      g = c_arr[k] ; 

     } 
     c=(c+g)%26; 
     //if c value exceeds the ascii value of 'Z' reduce it by subtracting 26(no.of alphabets) to keep in boundaries of ascii values of 'A' and 'Z' 
     if(c>'Z') 
      c=c-26; 
    } 
    //encryption logic for lowercase letters 
    else if(Character.isLowerCase(c)) 
    { 
     c=(c+g)%26; 
     //if c value exceeds the ascii value of 'z' reduce it by subtracting 26(no.of alphabets) to keep in boundaries of ascii values of 'a' and 'z' 
     if(c>'z') 
      c=c-26; 
    } 



    //concatinate the encrypted characters/strings 
    encrypted=encrypted+(char) c; 
} 
return encrypted;}}//end of public class` 

Antwort

0

Es sieht aus wie Sie über das Schlüsselwort in der Schleife für den Text sind Looping. Das ist nicht nötig.

Sie können Implementierungen von Vigenere Cipher at rosettacode finden. Ändern Sie den folgenden Java-Code nach Ihren Anforderungen (z. B. nach Groß-/Kleinschreibung und entsprechender Verarbeitung):

static String encrypt(String text, final String key) { 
     String res = ""; 
     text = text.toUpperCase(); 
     for (int i = 0, j = 0; i < text.length(); i++) { 
      char c = text.charAt(i); 
      if (c < 'A' || c > 'Z') continue; 
      res += (char)((c + key.charAt(j) - 2 * 'A') % 26 + 'A'); 
      j = ++j % key.length(); 
     } 
     return res; 
    } 

    static String decrypt(String text, final String key) { 
     String res = ""; 
     text = text.toUpperCase(); 
     for (int i = 0, j = 0; i < text.length(); i++) { 
      char c = text.charAt(i); 
      if (c < 'A' || c > 'Z') continue; 
      res += (char)((c - key.charAt(j) + 26) % 26 + 'A'); 
      j = ++j % key.length(); 
     } 
     return res; 
    } 
Verwandte Themen