Java Programm zur Verschlüsselung

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Okay, ich habe mal in die Bibliotheken reingeschaut. Die Klasse Biginteger arbeitet mit bytearrays im 2erkomplement in BigEndian Format. Es gibt aber auch die Möglichkeit eine Dezimal-Zahl als Text zu übergeben. Man bleibt mithin auf der symbolischen Ebene und braucht sich über die interne Repräsentation keine Gedanken zu machen. Das ist sehr praktisch.

Du brauchst also

0.eine Code Tabelle
Man könnte auch den Ascii-Code verwenden, den bekommt man allerdings nicht auf zwei
Dezimalstellen (max 100 Zeichen). Im Sinne der Aufgabenstellung ist das aber egal. Die Codierung muss bidirektional funktionieren, deshalb 2 Tabellen.

import java.math.BigInteger;
import java.util.HashMap;
HashMap hmCode = new HashMap();
HashMap hmDeCode = new HashMap();
String LetterCodes [ ] = { "A","01","B","02","C","03", "a","31","b","32","c","33" };
for(int i=0; i< LetterCodes.length; i+=2)
{
hmCode.put(LetterCodes[i], LetterCodes[i+1]);
hmDeCode.put(LetterCodes[i+1], LetterCodes[i]);
}
System.out.println("Test: Wert fuer A: "+ hmCode.get("A"));
System.out.println("Test: Letter fuer 01: "+ hmDeCode.get("01"));

1.Eingabe als Zahl codieren

String eingabe= "ABC";
for(int i=0; i< eingabe.length(); i++)
System.out.format( "%s ", hmCode.get(""+eingabe.charAt(i)));

2.Die Berechnung

BigInteger a = new BigInteger("2");
BigInteger b = new BigInteger("010203");
b=b.multiply(a);
String result= "Ergebnis: " + b.toString();
System.out.format( "Result; %s \n", result );

3.Decodieren

String ergebnis ="010203"; // soll ergeben: ABC
for(int i=0; i< ergebnis.length(); i+=2)
{
String LetterCode= "" + ergebnis.charAt(i) + ergebnis.charAt(i+1);
System.out.format( "Wandle Code %s ", LetterCode);
System.out.format( "in Letter %s \n", hmDeCode.get(LetterCode));
}

Beachte: Bei der Berechnung geht die führende Null verloren, also statt 010203 erhält man 10203. Mit 2 Dezimalstellen kann man -wie bereits gesagt- ein Alphabet mit 100 Zeichen codieren. Man koennte aber auch mehr Stellen nehmen.

Das hat mir sehr geholfen. Danke dafür. Eine Frage hab ich da allerdings noch:

Wie kann ich nun den Text den der Nutzer über den Scanner eingibt so berechnen?

0
@lolman110

Ich habe einfach mal versucht, den String "eingabe" mit dem Scanner zu definieren. allerdings kommt dann folgendes:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 119
at de.facharbeit.marius.TestprgrammBackup.main(TestprgrammBackup.java:22)
0
@lolman110

Ich habe die ganze Tabelle übrigens auch erweitert also nicht nur ABC sondern alle Buchstaben könnte das vielleicht daran liegen?

0
@lolman110

Nein, das Alphabet zu erweitern war ja Sinn der Sache. Du kannst den Code auf Paste.bin hochladen und mir den Link per PN schicken, dann kann ich dir sagen woran das liegt. cu

0

Du kannst in dem Fall auch einfach jeden char zu einem Integer casten lassen . Vielleicht greifst du aber auch einfach auf ein paar vorgefertigte verschlüsselungen wie Caesar zurück

Wie gesagt es muss sowas sein wegen der Nutzung von Einwegfunktionen in diesem Programm

0

Mal eine Frage dazu... Wäre für eine Facharbeit in Mathematik nicht eine wirkliche Verschlüsselung (z.B. eine die auf binärer Ebene arbeitet), wie z.B. AES besser geeignet, als eine Chiffre?

Ganz einfach:

In meiner Facharbeit geht es um Einwegfunktionen und deren Nutzung im RSA-Kryptosystem von Rivest, Shamir und Adleman.

Versteh mich bitte nicht falsch, ich meine das "Ganz einfach" nicht böse :)

0
@lolman110

Alles klar, dann denke ich mal, dass es dir bei dem Quellcode nur zum verdeutlichen des Ablaufs einer RSA-Verschlüsselung geht.

Wenn das so ist, stellt sich mir die Frage, warum du für jeden Buchstaben ein eigenes Zeichen definierst. Du könntest doch einfach den eingegebenen Text in ein char-Array speichern und dann die einzelnen Elemente z.B. zu einem Integer casten.

P.S.:

Ich hoffe, dir ist bewusst, dass grade die RSA-Verschlüsselung ein ziemlich zeit- und rechenintensiver Algorithmus ist und daher normalerweise auf einer viel tieferen Ebene implementiert wird. Sowas mit Java nachzubauen ist wirklich nur zur Verdeutlichung zu gebrauchen und sollte keinesfalls in anderen Programmen genutzt werden. (Vorallem, weil Java schon von Haus aus eine Implementation dafür mit sich bringt)

0

Was möchtest Du wissen?