Autor Beitrag
herr-master
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2

Win XP
Delphi 2007 Prof. Codegear Win32
BeitragVerfasst: 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)

ausblenden Delphi-Quelltext
1:
Und functioniert auch nicht richtig					


Ohne Quellcode kann ich Dir das nicht beantworten. Vermutlich wird fehlerhaft Chiffriert/Dechiffriert k.A.

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Sa 05.10.13 12:22 
doch hier so sollte es gehen aber das functioniert so nicht.
ausblenden 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);//rsa encrypt??
 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 2

Win XP
Delphi 2007 Prof. Codegear Win32
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
 // Initialisiert die Variablen c,n,e,m für MPArith 
 mp_init4(c,n,e,m);
 // Du liest die Zahlen e und n ein  
 mp_read_decimal_str(e,edit1.text);
 mp_read_decimal_str(n,edit2.text);
 // Durchführung eines Standard RSA mit den Parametern m, e, n und dem Ergebnis c
 // Basic RSA encryption operation, c=m^e mod n (Aus Beschreibung mpArith)
 mp_rsaep(m,e,n,c);//rsa encrypt??
 // der Parameter m wird eingelesen, müsste aber eigentlich hinter das  mp_read_decimal_str(n,edit2.text);
 mp_read_decimal_str(m,edit3.text);
 // Du gibst das Ergebnios in Edit3 aus
 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: 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:
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
... 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:
user profile iconherr-master hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconGammatesters MPArith funktioniert(!). Zuerst würde ich nach eigenen Fehlern suchen und dann in der Arbeit anderer.

Beste Grüße
Mathematiker

Nachtrag:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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
ausblenden 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