RSA Codierung - UTF32

Agreon

Mitglied
Hallo,

ich soll in einem Projekt meiner Schule eine RSA-Verschlüsselungsprogramm programmieren. Dazu habe ich mir auch schon einige Gedanken gemacht und das eigentliche Problem liegt auch nicht bei der Verschlüsselung, sondern beim Einlesen von Dateien wie Bilder oder anderen verschlüsselte Daten.
Ich versuche jetzt schon seit 2 Tagen, aus einer .png Datei die Zeichen einzulesen, sie in integer umzuwandeln, diese dann wieder auszulesen und in eine neue Datei zu schreiben("Out.txt"). Das alles ist erst einmal nur zum Testen gedacht. Bei normal kodierten Dateien funktioniert es einwandfrei.

Teile der Daten werden perfekt übertragen, aber sobald es zu Zeichen mit einem Wert > 9999 kommt, gibt es Probleme. Das "leere Zeichen" z.b. Hat einen Wert von 65536. Nun will ich aber nicht in die out Datei werte wie
Code:
00019,65012....
schreiben. Dazu gibt es ja Base64, leider weiß ich nicht wie ich all die UTF32 Zeichen in Base64 kodieren soll.

Sollte ich es vielleicht auch vollkommen anders angehen, wenn ich später mit diesen Daten rechnen will( um RSA anzuwenden)?


Ich hoffe ihr könnt mir ein paar Tipps oder Gedankenanstöße geben.

mfg,

Daniel
 

Gucky

Top Contributor
Ich würde es nicht mit Unicode machen, denn was tust du, wenn die Datei zwei Kilobyte und EIN Byte groß ist? Dann hast du ein halbes Zeichen.
Ließ mal lieber die Bytes aus. Das geht ganz einfach mit einem FileInputStream(new File(PFAD (am Besten Canonical)).

Warum willst du nicht Werte, wie
Code:
00019,65012....
schreiben? Oder schreibst du die Verschlüsselung als String? Da empfehle ich dir ganz stark die Datei als Binärdatei zu verwenden. Da hast du dann nicht die Probleme mit dem Lesen bis zum Komma und diese dann in eine Zahl umzuwandeln.
 

Agreon

Mitglied
Ok, danke erstmal. Also Bytes...

Aber sobald ich die Daten eingelesen habe, muss ich ja mit diesen weiterarbeiten um die RSA Berechnungen machen zu können. Ich weiß noch nicht genau wie ich das anstellen soll. Sollte ich vielleicht einen BigInteger verwenden?
 

Gucky

Top Contributor
BigInteger? Wozu das denn? Der ist für Zahlen, mit Stellen bis zum geht nicht mehr.
Du nimmst eine ArrayList, die am Besten schon mit der passenden Größe instanziiert wurde. Ich weiß aber nicht, welchen Datentyp du hast. Wie groß ist ein Wort in RSA? Also du verschlüsselst ein Byte. Wie groß ist die größte Zahl, die da raus kommen kann?
 

Agreon

Mitglied
Wie du hier(hier) nachlesen kannst, kommt das glaube ich darauf an wie man vorgeht. Leider weiß ich nicht wie.
Irgendwie brauche ich ja für alle 65535 Zeichen die in der anderen Datei stehen könnten, irgendeinen Integer, mit dem ich weiterrechnen kann.
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Also was genau ist jetzt dein Problem?
Du wolltest Daten einlesen: FileInputStream Hacken dran
Bitte ergänze die Liste.


Hast du das RSA Verfahren denn verstanden und könntest du jetzt per Hand (und einem Taschenrechner) einen Text verschlüsseln?

Wenn wir es so machen, wie in dem Beispiel, brauchst du einen Datentyp, der drei Byte aufnehmen kann. Da böte sich ein Integer an. Wie du aus Bytes Integer machst:
Java:
byte byte1 = WERT1;
byte byte2 = WERT2;
byte byte3 = WERT3;

int dreierByte = (byte1 << (8*0) & (byte2 << (8 * 1)) & (byte3 << (8 * 2))
oder:
Java:
byte byte1 = WERT1;
byte byte2 = WERT2;
byte byte3 = WERT3;

int dreierByte = byte1;
dreierByte = dreierByte << 8;
dreierByte |= byte2;
dreierByte = dreierByte << 8;
dreierByte |= byte3;
 
Zuletzt bearbeitet:

Agreon

Mitglied
Ich kann eine Zahl( Die vorher konvertiert wurde), mit Hile einer Anleitung verschlüsseln. So schwer ist das nicht, sobald man die Nummer hat. Man sucht ein paar zufällige primzahlen usw.. aber gut. Sobald ich eine Zahl habe, kann ich die konvertieren.
Nun ist die Frage, wie bilde ich die Zahl. berechne ich alles auf einmal, und verwende BigInteger, oder spalte ich das immer alle paar Zeichen.
Bsp. Nachricht: AB
A = 00065 +
B = 00066 -> 0006500066

So hätte ich es vorerst gespeichert um damit weiterarbeiten zu könnnen.
Leider wird die verschlüsselte Datei dann circa 5 mal so groß. :/. ich denke nicht, dass das so sein sollte.

Ok. Ich werde mir das mit den Bytes mal anschauen...
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Was ich noch vergessen habe: du musst Vorzeichenlos arbeiten, weshalb bei der zweiten Variante auch das erste = ein |= sein muss. Oder google mal nach toUnsingedInt() im Zusammenhang mit byte. Morgen kann ich dir, so du nichts findest, dazu mehr geben.
 

Ähnliche Java Themen

Neue Themen


Oben