Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

15.06.2007, 09:29

Ja ich habe das etwas unverständlich ausgedrückt.
Man muss erstmal wissen was ein Block ist. Alle Daten, egal welcher Art, sind folgen von 0 und 1. Diese werden wiederum in Blöcke eingeteilt und entsprechend interpretiert. Z.B. werden für einen int oft 4 * 8 Bit genommen.

Da RSA mathematisch arbeitet musst du also die Blöcke als Zahlen interpretieren.

Als öffentlichen schlüssel hast du die zahlen x und m
und als privaten schlüssel hast du y und m

Die verschlüsselung wäre ja Eingabeblock^x modulo m

Das Ergebnis ist also eine Zahl zwischen 0 und m. Daher ist ein Block so groß wie m.
m wird jedoch aus beiden Priemzahlen errechnet.
Das wollte ich damit sagen.

Mit standardvariablen kann man nur sehr geringe Blöcke darstellen. Diese sind extrem leicht zu erraten und extrem unsicher. Momentan sagt man das eine chiffre ab 1024 Bit sicher ist. Also brauchst du Zahlen mit 1024 Bit ein long hat aber nur 32 Bit und ist unsicher.

Zudem scheint es ja so als ob deine Priemzahlen an die crypt function übergeben werden. Also 2 * 32 Bit aber du stopfst es in ein char der auf einem x86 meist 8 Bit hat. Passt also eigentlich nicht.


Genauere Infos kann ich dir geben wenn ich meine Bücher wieder finde :lol:

Im Web sollten aber genug Infos vorhanden sein ;)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

12

15.06.2007, 09:36

Kleine Korrektur:

Zitat von »"chriss"«

Die verschlüsselung wäre ja Eingabeblock^x modulo m
Das Ergebnis ist also eine Zahl zwischen 0 und m.


Das Ergebnis liegt zwischen 0 und m - 1.

13

15.06.2007, 14:48

Zitat

Zudem scheint es ja so als ob deine Priemzahlen an die crypt function übergeben werden. Also 2 * 32 Bit aber du stopfst es in ein char der auf einem x86 meist 8 Bit hat. Passt also eigentlich nicht.


Ich stopfe nur die verschlüsselte Zahl wieder in einen char um sie als Zeichen darstellen zu können, also nur das "Ergebnis". Die Schlüssellänge hat ja trotzdem noch 2*32bit. Das ganze sollte als erstes mal funktionieren dann stell ich es auf größere Schlüssellängen um, das ist ja mit relativ wenig Aufwand verbunden, vorrausgesetzt ich schreibe die Klassen für die großen Zahlen nicht selbst, versteh sich.
Das Böse ist des Menschensbeste Kraft - Friedrich Nietzsche

14

15.06.2007, 15:24

Nein das geht nicht :!:

C-/C++-Quelltext

1
2
3
unsigned long n = p*q;
unsigned long m = getcharValue(zeichen);
unsigned long c = (m^e) % n ;

Der Rückgabewert muss so groß wie n sein.

Abgesehen davon

Quellcode

1
unsigned long = unsigned long * unsigned long

entspricht

Quellcode

1
32 Bit = 32 Bit * Bit


gehen würde

C-/C++-Quelltext

1
2
3
unsigned long long n = p*q;
unsigned long m = getcharValue(zeichen);
unsigned long long  c = (m^e) % n ;

15

19.06.2007, 20:47

.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FOGX« (15.09.2010, 16:07)


Werbeanzeige