Guten Tag,
wenn ich folgendes Programm ausführe hat es immer Probleme mit mehr als einem Wort als Eingabe. Wenn ich bspw. 2 Wörter eingebe wird das 2 bei der Vigenere Verschlüsslung für den Key gehalten obwohl das eigentlich noch zum ersten String gehören sollte.
Weiß jemand woran das liegt?
[CODE lang="java" title="Vigenere"]package crypt;
public class Vigenere {
public String finishedEncryption,finishedDecryption;
public String encrypt(String pText, String pKeyword) {
char charArrayText [] = pText.toCharArray();
char charArrayKeyword [] = pKeyword.toCharArray();
int [] x = new int[charArrayText.length];
int [] k = new int[charArrayKeyword.length];
int [] y = new int[charArrayText.length];
char[] result = new char[charArrayText.length];
for(int i=0;i<charArrayText.length;i++) {
x = charArrayText;
x -= 65;
}
for(int i=0;i<charArrayKeyword.length;i++) {
k = charArrayKeyword;
k -= 65;
}
int kword =0;
for(int i=0;i<charArrayText.length;i++) {
if(!(x==' ')) {
y = x+k[kword];
kword++;
if(kword==k.length) {
kword=0;
}
if(y>25) {
y -= 26;
}
}
y+=65;
result=(char) y;
}
finishedEncryption = new String(result);
return finishedEncryption;
}
public String decrypt(String pText, String pKeyword) {
char charArrayText [] = pText.toCharArray();
char charArrayKeyword [] = pKeyword.toCharArray();
}
}[/CODE]
[CODE lang="java" title="Caesar"]package crypt;
public class Caesar {
public int[] pE, pD;
public char[] übertragung;
public String finishedEncryption,finishedDecryption;
public String encrypt(String pText, int pKey) {
char charArray[] = pText.toCharArray();
pE = new int[charArray.length];
übertragung = new char[charArray.length];
for (int i=0;i<charArray.length; i++) {
pE = charArray;
}
for (int i=0;i<charArray.length; i++) {
pE = pE+pKey;
if (pE>='Z'+1) {
pE -=26;
}
übertragung=(char) pE;
}
finishedEncryption = new String(übertragung);
return finishedEncryption;
}
public String decrypt(String pText, int pKey) {
char charArray[] = pText.toCharArray();
pD = new int[charArray.length];
übertragung = new char[charArray.length];
for (int i=0;i<charArray.length; i++) {
pD = charArray;
}
for (int i=0;i<charArray.length; i++) {
pD = pD-pKey;
if (pD<='A'-1) {
pD +=26;
}
übertragung=(char) pD;
}
finishedEncryption = new String(übertragung);
return finishedEncryption;
}
}[/CODE]
[CODE lang="java" title="Main"]package crypt;
import java.util.*;
public class Main {
public static Scanner sc = new Scanner(System.in);
public static int eingabe,eingabeCaesar,eingabeVigenere;
public static boolean errorEingabe = true;
public static Caesar c = new Caesar();
public static Vigenere v = new Vigenere();
public static void main(String[] args) {
System.out.println("Facharbeit Kryptographie von ");
System.out.println();
System.out.println("Wählen Sie folgend wie Sie Ihren Klartext mittels historischer Chiffre chiffrieren wollen:");
while(errorEingabe) {
System.out.println("(1) Caesar-Chiffre (2) Vigenere-Chiffre");
eingabe = sc.nextInt();
if (eingabe == 1) {
errorEingabe = false;
System.out.println("Caesar-Chiffre");
System.out.println("Möchten Sie eine Chiffrierung (1) oder eine Dechiffrierung (2) durchführen?");
eingabeCaesar = sc.nextInt();
if(eingabeCaesar == 1) {
System.out.println("Bitte geben Sie zuerst den Klartext(Nur Großbuchstaben) ein, drücken Sie danach enter und geben Sie anschließend den Schlüssel (ganze Zahl) ein");
System.out.println(c.encrypt(sc.next(),sc.nextInt()));
}
else if (eingabeCaesar == 2) {
System.out.println("Bitte geben Sie zuerst das Chiffrat(Nur Großbuchstaben) ein, drücken Sie danach enter und geben Sie anschließend den Schlüssel (ganze Zahl) ein");
System.out.println(c.decrypt(sc.next(),sc.nextInt()));
}
else {
System.out.println("Ihre Eingabe ist ungültig.");
errorEingabe = true;
}
}
else if (eingabe == 2) {
errorEingabe = false;
System.out.println("Vigenere-Chiffre");
System.out.println("Möchten Sie eine Chiffrierung (1) oder eine Dechiffrierung (2) durchführen?");
eingabeVigenere = sc.nextInt();
if(eingabeVigenere == 1) {
System.out.println("Bitte geben Sie zuerst den Klartext ein, drücken Sie danach enter und geben Sie anschließend das Schlüsselwort ein");
String s = sc.next();
String k = sc.next();
System.out.println(v.encrypt(s,k));
}
else if (eingabeCaesar == 2) {
System.out.println("Bitte geben Sie zuerst das Chiffrat ein, drücken Sie danach enter und geben Sie anschließend das Schlüsselwort ein");
System.out.println(v.decrypt(sc.next(),sc.next()));
}
else {
System.out.println("Ihre Eingabe ist ungültig.");
errorEingabe = true;
}
}
else {
System.out.println("Ihre Eingabe ist ungültig. Wählen Sie bitte:");
}
}
}
}[/CODE]
Vielen Dank!
wenn ich folgendes Programm ausführe hat es immer Probleme mit mehr als einem Wort als Eingabe. Wenn ich bspw. 2 Wörter eingebe wird das 2 bei der Vigenere Verschlüsslung für den Key gehalten obwohl das eigentlich noch zum ersten String gehören sollte.
Weiß jemand woran das liegt?
[CODE lang="java" title="Vigenere"]package crypt;
public class Vigenere {
public String finishedEncryption,finishedDecryption;
public String encrypt(String pText, String pKeyword) {
char charArrayText [] = pText.toCharArray();
char charArrayKeyword [] = pKeyword.toCharArray();
int [] x = new int[charArrayText.length];
int [] k = new int[charArrayKeyword.length];
int [] y = new int[charArrayText.length];
char[] result = new char[charArrayText.length];
for(int i=0;i<charArrayText.length;i++) {
x = charArrayText;
x -= 65;
}
for(int i=0;i<charArrayKeyword.length;i++) {
k = charArrayKeyword;
k -= 65;
}
int kword =0;
for(int i=0;i<charArrayText.length;i++) {
if(!(x==' ')) {
y = x+k[kword];
kword++;
if(kword==k.length) {
kword=0;
}
if(y>25) {
y -= 26;
}
}
y+=65;
result=(char) y;
}
finishedEncryption = new String(result);
return finishedEncryption;
}
public String decrypt(String pText, String pKeyword) {
char charArrayText [] = pText.toCharArray();
char charArrayKeyword [] = pKeyword.toCharArray();
}
}[/CODE]
[CODE lang="java" title="Caesar"]package crypt;
public class Caesar {
public int[] pE, pD;
public char[] übertragung;
public String finishedEncryption,finishedDecryption;
public String encrypt(String pText, int pKey) {
char charArray[] = pText.toCharArray();
pE = new int[charArray.length];
übertragung = new char[charArray.length];
for (int i=0;i<charArray.length; i++) {
pE = charArray;
}
for (int i=0;i<charArray.length; i++) {
pE = pE+pKey;
if (pE>='Z'+1) {
pE -=26;
}
übertragung=(char) pE;
}
finishedEncryption = new String(übertragung);
return finishedEncryption;
}
public String decrypt(String pText, int pKey) {
char charArray[] = pText.toCharArray();
pD = new int[charArray.length];
übertragung = new char[charArray.length];
for (int i=0;i<charArray.length; i++) {
pD = charArray;
}
for (int i=0;i<charArray.length; i++) {
pD = pD-pKey;
if (pD<='A'-1) {
pD +=26;
}
übertragung=(char) pD;
}
finishedEncryption = new String(übertragung);
return finishedEncryption;
}
}[/CODE]
[CODE lang="java" title="Main"]package crypt;
import java.util.*;
public class Main {
public static Scanner sc = new Scanner(System.in);
public static int eingabe,eingabeCaesar,eingabeVigenere;
public static boolean errorEingabe = true;
public static Caesar c = new Caesar();
public static Vigenere v = new Vigenere();
public static void main(String[] args) {
System.out.println("Facharbeit Kryptographie von ");
System.out.println();
System.out.println("Wählen Sie folgend wie Sie Ihren Klartext mittels historischer Chiffre chiffrieren wollen:");
while(errorEingabe) {
System.out.println("(1) Caesar-Chiffre (2) Vigenere-Chiffre");
eingabe = sc.nextInt();
if (eingabe == 1) {
errorEingabe = false;
System.out.println("Caesar-Chiffre");
System.out.println("Möchten Sie eine Chiffrierung (1) oder eine Dechiffrierung (2) durchführen?");
eingabeCaesar = sc.nextInt();
if(eingabeCaesar == 1) {
System.out.println("Bitte geben Sie zuerst den Klartext(Nur Großbuchstaben) ein, drücken Sie danach enter und geben Sie anschließend den Schlüssel (ganze Zahl) ein");
System.out.println(c.encrypt(sc.next(),sc.nextInt()));
}
else if (eingabeCaesar == 2) {
System.out.println("Bitte geben Sie zuerst das Chiffrat(Nur Großbuchstaben) ein, drücken Sie danach enter und geben Sie anschließend den Schlüssel (ganze Zahl) ein");
System.out.println(c.decrypt(sc.next(),sc.nextInt()));
}
else {
System.out.println("Ihre Eingabe ist ungültig.");
errorEingabe = true;
}
}
else if (eingabe == 2) {
errorEingabe = false;
System.out.println("Vigenere-Chiffre");
System.out.println("Möchten Sie eine Chiffrierung (1) oder eine Dechiffrierung (2) durchführen?");
eingabeVigenere = sc.nextInt();
if(eingabeVigenere == 1) {
System.out.println("Bitte geben Sie zuerst den Klartext ein, drücken Sie danach enter und geben Sie anschließend das Schlüsselwort ein");
String s = sc.next();
String k = sc.next();
System.out.println(v.encrypt(s,k));
}
else if (eingabeCaesar == 2) {
System.out.println("Bitte geben Sie zuerst das Chiffrat ein, drücken Sie danach enter und geben Sie anschließend das Schlüsselwort ein");
System.out.println(v.decrypt(sc.next(),sc.next()));
}
else {
System.out.println("Ihre Eingabe ist ungültig.");
errorEingabe = true;
}
}
else {
System.out.println("Ihre Eingabe ist ungültig. Wählen Sie bitte:");
}
}
}
}[/CODE]
Vielen Dank!