Autor |
Beitrag |
herr-master
Beiträge: 34
|
Verfasst: Sa 05.10.13 10:55
Hallo kann mir wer sagen warum ich bei MPArith so viel code benutzen muss für ein einfaches rsa encrypt.Und functioniert auch nicht richtig.
Kann mir wer ein bsp schreieben wie man rsa encrypt bei MPArith verwendet.
Danke schon mal im vorraus.
|
|
Quitzlinga
Beiträge: 60
Erhaltene Danke: 2
Win XP
Delphi 2007 Prof. Codegear Win32
|
Verfasst: Sa 05.10.13 12:13
Hi,
ohne Quellcodedetails kann ich bisher nur folgendes sagen bzw vermuten :
Werfe MPArith und RSA nicht in einen Topf. MPArith liefert Dir nur Datentypen und Routinen, die sich mit der Berechnung grosser (Fließkomma)-Zahlen beschäftigt, die wiederum vom RSA-Algorithmus zwingend benötigt werden.
Zitat: | Hallo kann mir wer sagen warum ich bei MPArith so viel code benutzen muss für ein einfaches rsa encrypt |
Was ist für dich gross ? Ob nun RSA oder ein anderer Algorithmus, Du musst mindestens die Funktionen Verschlüsseln / Entschlüsseln und Schlüsselgenerierung mit den entsprechenden Parametern umsetzen, das ist nicht in ein paar Zeilen Code gemacht. Bezüglich des RSA können vermutlich einige Funktionen schon durch mitgelieferte Delphi-Funktionen ersetzt werden und den Code daurch ehblich kürzen. Da diese aber maximal 32/64 Bit Parameter annehmen / damit rechnen sind sie für einen vernünftigen RSA nutzlos (der arbeitet ab 1024 Bit und höher mit seinen Berechnungen -> darum MPArith)
Delphi-Quelltext 1:
| Und functioniert auch nicht richtig |
Ohne Quellcode kann ich Dir das nicht beantworten. Vermutlich wird fehlerhaft Chiffriert/Dechiffriert k.A.
Delphi-Quelltext 1:
| Kann mir wer ein bsp schreieben wie man rsa encrypt bei MPArith verwendet. |
Auch hier nochmal gesagt : MPArith hat nichts mit RSA zu tun. Es hat (soweit ich sehen konnte) nur Datentypen und Funktionen zum Berechnen grosser Zahlen aber keinerlei Funktionalität zum Verschlüsseln, Entschlüsseln oder Schlüsselgenerierung.
Wikipedia liefert Dir zum Stichwort RSA eine sehr gute Übersicht, wie man so etwas implentiert. Bezüglich der Ermittlung der Schlüssel sind das zwar "nur 5 Schritte" aber die haben es in sich. Eine konkrete Umsetzung in Delphi dürfte durchaus umfangreich sein. Aber warum das Rad neuerfinden ? Benutze doch einafch ein paar der Bibliotheken aus dem Netz (zB. Lockbox), die bereits RSA unterstützen.
Ich hoffe, das hilft Dir etwas weiter aber Verschlüsselung ist ,auch in den Grundzügen, schon ein ziemlich umfangreiches Thema, das man nicht mal eben so abhandeln kann.
MfG
Quitzlinga
|
|
herr-master
Beiträge: 34
|
Verfasst: Sa 05.10.13 12:22
doch hier so sollte es gehen aber das functioniert so nicht.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| mp_init4(c,n,e,m); mp_read_decimal_str(e,edit1.text); mp_read_decimal_str(n,edit2.text); mp_rsaep(m,e,n,c); mp_read_decimal_str(m,edit3.text); edit4.text:=mp_adecimal(c); |
selbst wenn ich das benutze functioniert es nicht.
E=65537(10er)
n=123457171127564473956360536343713050577(128bits)
Bei fgint ist es ja so
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| FGintRSA.RSAEncrypt ( StringEdt.Text, Private_Exp, Modulus_N, EncryptedString ); |
Es hat (soweit ich sehen konnte) nur Datentypen und Funktionen zum Berechnen grosser Zahlen aber keinerlei Funktionalität zum Verschlüsseln, Entschlüsseln oder Schlüsselgenerierung.
doch hatt es was glaubst du für was mp_rand_bits steht in mparith.
tplockbox gibt es doch nicht für delphi xe4 oder doch?
|
|
Quitzlinga
Beiträge: 60
Erhaltene Danke: 2
Win XP
Delphi 2007 Prof. Codegear Win32
|
Verfasst: Sa 05.10.13 13:36
Hi,
hatte garnicht gesehen, das da noh zusätzlich Funktionalität versteckt war. Man lernt nicht aus.
Ich kommentiere das ganze jetzt erst einmal:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| mp_init4(c,n,e,m); mp_read_decimal_str(e,edit1.text); mp_read_decimal_str(n,edit2.text); mp_rsaep(m,e,n,c); mp_read_decimal_str(m,edit3.text); edit4.text:=mp_adecimal(c); |
Der Fehler wird wahrscheinlich die Variable m sein, denn die wird erst nach der Berechnung eingelesen, obwohl sie dafür schon benötigt wird. Die Verschlüsselung selbst, da gehe ich mal von aus, ist in Ordnung.
Zur zweiten Funktion kann ich nicht viel sagen, bloss das dieser einen kompletten String verschlüsselt und nicht bloss eine Zahl, wie im obigen Algorithmus.
Zitat: | tplockbox gibt es doch nicht für delphi xe4 oder doch? |
Delphi XE4 habe ich leider nicht aber da ich Lockbox auf XE2 unter 32/64 Bit am laufen habe, wirds wohl auch auf XE4 laufen. Einfach ausprobieren.
MfG
Quitzlinga
|
|
herr-master
Beiträge: 34
|
Verfasst: Sa 05.10.13 13:49
Ich habs jetzt mal umgedreht aber mparith scheint keine 10 base zu kennen:
Diese zahelen stammen von keygener assistant 2.1.0 bei at4re.
e=65537
N=253615971199085675420193811977875906791
Wenn ich die zahlen verwende bekomme ich s_mp_read_radix:invalid number syntax
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Sa 05.10.13 13:50
Hallo herr-master,
Entschuldige bitte, aber unter
www.entwickler-ecke....lphi+xe4_112097.html
habe ich Dir schon zum wichtigsten Fehler in Deinem Quelltext geschrieben:
Mathematiker hat folgendes geschrieben : | ... Nach Deinem Quelltext hast Du zwar m initialisiert, aber diesem keinen Wert zugewiesen. ... |
Die Antworten ignorieren und einfach einen neuen Thread aufmachen, ist schon merkwürdig.
Und noch etwas:
herr-master hat folgendes geschrieben : | Hallo kann mir wer sagen warum ich bei MPArith so viel code benutzen muss für ein einfaches rsa encrypt.Und functioniert auch nicht richtig. |
Im ersten Thread hatte ich schon ausgeführt, dass Gammatesters MPArith funktioniert(!). Zuerst würde ich nach eigenen Fehlern suchen und dann in der Arbeit anderer.
Beste Grüße
Mathematiker
Nachtrag:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button1Click(Sender: TObject); var m,e,n,c:mp_int; begin mp_init4(m,e,n,c); mp_read_decimal_str(m, '1234567890111111111111111111111111111'); mp_read_decimal_str(e, '65537'); mp_read_decimal_str(n, '253615971199085675420193811977875906791'); mp_rsaep(m,e,n,c); listbox1.items.add(mp_adecimal(c)); mp_clear4(m,e,n,c); end; |
zum Beispiel funktioniert einwandfrei und zeigt korrekt c = 124965126236792593538163237532485181769 an.
Sollte aber m > n sein, dann geht es natürlich nicht.
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
herr-master
Beiträge: 34
|
Verfasst: Sa 05.10.13 14:28
sorry mein fehler habs jetzt verstanden warum es nicht ging.
Der fehler war be mir hier mp_read_decimal_str(m,edit3.text); nur zahlen mit mp_read_decimal_str.
Für einen normalen string also hallo scheint das eine andere function zu sein.
Und meins geht ja auch so
Delphi-Quelltext 1: 2: 3:
| mp_read_decimal_str(e,edit1.text); mp_read_decimal_str(n,edit2.text); |
Bei dir kann man doch e und n aus der exe im debugger lesen.
Ich habe doch m einen wert zugewiesen und zwar edit3.text
|
|
|