F
FranzFerdinand
Gast
Hallöle,
ich habe mir eine Caesarverschlüsselung gebastelt. Es existieren zwei Textareas links und rechts und in der Mitte gibt man den Schlüssel (bis 128) ein, mit welchem in der ASCII Tabelle verschoben wird.
Es gibt einen Ver- und einen Entschlüsselungsbutton.
So sieht mein Quellcode nun aus:
Es funktioniert relativ spitzenmäßig, aber bei Umlauten macht er Stress.
Als Beispiel habe ich einmal "Heizölrückstoßabdämpfung" eingegeben.
Verschlüsselt mit dem Wert 4 ergibt sich hier: "Lim~zpvgowxscefhhqtjyrk"
Wenn ich genau das wieder mit 4 Entschlüssle kommt das hier heraus:
"Heizvlrcksto_abddmpfung"
Es scheint also zu funktionieren, nur etwaige Sonderzeichen machen Zicken.
Kann mir jemand erklären, wie ich derartige Fälle vorbeugen kann?
Vielen Lieben Dank!
Gruß
Lukas
ich habe mir eine Caesarverschlüsselung gebastelt. Es existieren zwei Textareas links und rechts und in der Mitte gibt man den Schlüssel (bis 128) ein, mit welchem in der ASCII Tabelle verschoben wird.
Es gibt einen Ver- und einen Entschlüsselungsbutton.
So sieht mein Quellcode nun aus:
Java:
package caesar;
import java.awt.Button;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.text.NumberFormatter;
public class Caesarverschluesseln {
private static JFrame frame1 = new JFrame("Caesarverschlüsselung");
private int frameWidth = 770;
private int frameHeight = 600;
private NumberFormat format = NumberFormat.getInstance();
private NumberFormatter formatter = new NumberFormatter(format);
private Button buttonverschluesseln = new Button("-->");
private Button buttonentschluesseln = new Button("<--");
private JFormattedTextField schluesselfeld = new JFormattedTextField(formatter);
private JTextArea klartext = new JTextArea();
private JScrollPane klartextScrollPane = new JScrollPane(klartext);
private JTextArea geheimtext = new JTextArea();
private JScrollPane geheimtextScrollPane = new JScrollPane(geheimtext);
private String klartextstring = new String();
private String geheimtextstring = new String();
private int schluessel;
public Caesarverschluesseln() {
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setSize(frameWidth, frameHeight);
frame1.setResizable(false);
Container cp = frame1.getContentPane();
cp.setLayout(null);
buttonverschluesseln.setBounds(360, frameHeight/2-44, 50, 26);
buttonverschluesseln.setVisible(true);
buttonverschluesseln.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
buttonverschluesseln_ActionPerformed(evt);
}
});
cp.add(buttonverschluesseln);
buttonentschluesseln.setBounds(360, frameHeight/2+18, 50, 26);
buttonentschluesseln.setVisible(true);
buttonentschluesseln.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
buttonentschluesseln_ActionPerformed(evt);
}
});
cp.add(buttonentschluesseln);
schluesselfeld.setBounds(360, frameHeight/2-13, 50, 26);
schluesselfeld.setToolTipText("Schlüssel");
schluesselfeld.setHorizontalAlignment(JTextField.CENTER);
schluesselfeld.setVisible(true);
cp.add(schluesselfeld);
klartextScrollPane.setBounds(5, 5, 350, frameHeight-30);
klartext.setText("Heizölrückstoßabdämpfung");
klartext.setLineWrap(true);
klartext.setWrapStyleWord(true);
klartext.setToolTipText("Klartext");
cp.add(klartextScrollPane);
geheimtextScrollPane.setBounds(415, 5, 350, frameHeight-30);
geheimtext.setLineWrap(true);
geheimtext.setWrapStyleWord(true);
geheimtext.setToolTipText("Geheimtext");
cp.add(geheimtextScrollPane);
format.setGroupingUsed(false);
formatter.setAllowsInvalid(false);
frame1.setLocationRelativeTo(null);
frame1.setVisible(true);
}
private void buttonverschluesseln_ActionPerformed(ActionEvent evt) {
klartextstring = klartext.getText();
char[] verschluesselarr = klartextstring.toCharArray();
if(schluesseleinlesen() == true) {
char[] verschluesselarrfertig = verschluesseln(verschluesselarr);
geheimtextstring = String.valueOf(verschluesselarrfertig);
geheimtext.setText(geheimtextstring);
}
}
private char[] verschluesseln(char[] charArray) {
char[] cryptArray = new char[charArray.length];
for(int i=0;i<charArray.length;i++) {
int verschiebung = (charArray[i] + schluessel)%128;
cryptArray[i] = (char)(verschiebung);
}
return cryptArray;
}
private void buttonentschluesseln_ActionPerformed(ActionEvent evt) {
geheimtextstring = geheimtext.getText();
char[] entschluesselarr = geheimtextstring.toCharArray();
if(schluesseleinlesen() == true) {
char[] entschluesselarrfertig = entschluesseln(entschluesselarr);
klartextstring = String.valueOf(entschluesselarrfertig);
klartext.setText(klartextstring);
}
}
public char[] entschluesseln(char[] charArray) {
char[] cryptArray = new char[charArray.length];
int verschiebung;
for(int i=0;i<charArray.length;i++) {
if(charArray[i] - schluessel < 0) {
verschiebung = charArray[i] - schluessel + 128;
} else {
verschiebung = (charArray[i] - schluessel)%128;
cryptArray[i] = (char)(verschiebung);
}
}
return cryptArray;
}
private boolean schluesseleinlesen() {
String schluesselstr = schluesselfeld.getText();
try {
schluessel = Integer.parseInt(schluesselstr);
if(schluessel < 0) {
schluessel = schluessel%128;
schluessel = 128 - schluessel;
}
return true;
} catch (NumberFormatException ex){
JOptionPane.showMessageDialog(null, "Dein Schlüssel ist ungültig.\nBitte wähle eine Zahl im Bereich von 1 bis 128.", "Falscher Schlüssel", JOptionPane.PLAIN_MESSAGE);
return false;
}
}
public static void main(String[] args) {
new Caesarverschluesseln();
}
}
Es funktioniert relativ spitzenmäßig, aber bei Umlauten macht er Stress.
Als Beispiel habe ich einmal "Heizölrückstoßabdämpfung" eingegeben.
Verschlüsselt mit dem Wert 4 ergibt sich hier: "Lim~zpvgowxscefhhqtjyrk"
Wenn ich genau das wieder mit 4 Entschlüssle kommt das hier heraus:
"Heizvlrcksto_abddmpfung"
Es scheint also zu funktionieren, nur etwaige Sonderzeichen machen Zicken.
Kann mir jemand erklären, wie ich derartige Fälle vorbeugen kann?
Vielen Lieben Dank!
Gruß
Lukas