![]() |
RSA verschlüsselung funktioniert nicht...
Liste der Anhänge anzeigen (Anzahl: 1)
hi, ich habe ein programm für die verschlüsselung mit dem RSA verfahren gebastelt, bekkomme die entschlüsselung aber leider nicht hin...
ich gehe euch mal eben einen kleinen überblick über mein Programm... Dies ist die grafische Oberfläche... (jetzt im anhang (von admin so vorgeschrieben)) die Schlüssel haben wie ihr gleich im quelltext seht nichts zu sagen...
Delphi-Quellcode:
Dies sind die procedure's für die ent- und verschlüsselung...
procedure tcodiermaschine.verschluesseln;
var i, acode : integer; begin // Klartext zu ASCII for i := 1 to length (klartext) do begin // 1 ASCII- Code der i-ten Buchstaben ermitteln acode := ord(Klartext[i]); // 2 Durch formel ( C = M^e mod N ) verschlüsseln acode := (acode + round(exp(7*ln(5))) mod 187); // 3 Das Zweichen mit dem ASCII- Code acode an der i-ten Stelle im chiffre ablegen codetext[i] := chr(acode); end; end; procedure tcodiermaschine.entschluesseln; var i : single; var acode : extended; begin // Klartext zu ASCII for i := 1 to length (klartext) do begin // 1 ASCII- Code der i-ten Buchstaben ermitteln acode := ord(codetext[i]); // 2 Durch formel ( M = C^d mod N ) verschlüsseln acode := (acode - round(exp(23*ln(146))) mod 187); // 3 Das Zweichen mit dem ASCII- Code acode an der i-ten Stelle im chiffre ablegen klartext[i] := chr(acode); end; end; Die verschlüsselung funktioniert, aber bei der entschlüsselung haut delphi immer die Fehlermeldung raus, dass die Schleifenvariable falsch sei... Dies habe ich schon versucht mit dem Datentypen integer versucht zu behen, aber dafür sind die Zahlen einfach zu groß (bei diesem Beispiel wäre die zahl mit der man mod rechnet bei etwa 3,6*10^46) Ich hoffe ihr habt eine gute Lösung für mein Problem... Vielen Dank schonmal im voraus... :) greetz Bblackhawk |
Re: RSA verschlüsselung funktioniert nicht... BITTE HELFT MI
Delphi-Quellcode:
i sollte vom Typ Byte oder Integer (Ganzzahling) sein
var i : single;
var acode : extended; begin // Klartext zu ASCII for i := 1 to length (klartext) do Single ist hier nicht richtig. Grüße Klaus |
Re: RSA verschlüsselung funktioniert nicht... BITTE HELFT MI
Das ist selbst im Ansatz kein RSA:
Delphi-Quellcode:
Hier wird ja "nur" ein fester Wert drauf addiert im Gegensatz zur Formel. Wenn Du diese andere Art Verschlüsselung akzeptierst, ist die Entschlüsselung natürlich
// 2 Durch formel ( C = M^e mod N ) verschlüsseln
acode := (acode + round(exp(7*ln(5))) mod 187);
Delphi-Quellcode:
.
acode := (acode - round(exp(7*ln(5))) mod 187);
Aber implementiere mal nach den Formel, benutzte Integerarithmetik und suche nach "Schnelle Modulare Exponentation" (im wesentlich ausmultiplizieren und nach jedem Schritt mod ausführen). Gruß Gammatester |
Re: RSA verschlüsselung funktioniert nicht... BITTE HELFT MI
In diesem
![]() |
Re: RSA verschlüsselung funktioniert nicht... BITTE HELFT MI
Hai Bblackwawk.
Ersteinmal: "Herzlich Willkommen in der Delphi-PRAXiS" :hello: Eine "bitte" habe ich an Dich. Ändere den Titel deines Threads und nehme das "bitte helft mit!!!" heraus. Hilfe sucht hier so ziemlich jeder ;-) Wie das geht? Ganz einfach. Klicke bei deinem obersten Posting auf den "Edit-Button". danke. p.s. und hänhe bei der gelegenheit das Bild als Anhang an dein Posting. |
Re: RSA verschlüsselung funktioniert nicht...
zu #2 das problem ist, dass es dann, wenn ich den datentypen von i ändere, folgendes nicht mehr funktioniert...
Delphi-Quellcode:
zu #3 es ist nur ein beispiel.. also sind das nur testzahlen, damit das überhaupt erstmal funktioniert... ;)
klartext[i] := chr(acode);
zu #4 danke das bringt mich schon etwas weiter.. aber damit habe ich immernoch das problem, dass ich da nur zahlen verschlüsseln kann, was ich aber brauche sind texte... trotzdem vielen dank :) Vielen dank nochmal für eure mühe... :) habt ihr evtl noch vorschläge die funktionieren würden? nice greetz Bblackhawk |
Re: RSA verschlüsselung funktioniert nicht...
Zitat:
Wenn Klartext bei Dir ein String ist, dann sind die Indizes des Strings vom Typ Integer (Ganzzahl) und kein realWert. [edit] Warum ist bei acode so definiert:
Delphi-Quellcode:
Auch hier braucht es keinen Realwert sondern nur einen Ganzzahlwert
var acode : extended;
den Ord(...) liefert auch nur ein Integer zurück.
Delphi-Quellcode:
[/edit]
procedure tcodiermaschine.entschluesseln;
var i : Integer; acode : Integer; begin // Klartext zu ASCII for i := 1 to length (klartext) do begin // 1 ASCII- Code der i-ten Buchstaben ermitteln acode := ord(codetext[i]); // 2 Durch formel ( M = C^d mod N ) verschlüsseln acode := (acode - round(exp(23*ln(146))) mod 187); // 3 Das Zweichen mit dem ASCII- Code acode an der i-ten Stelle im chiffre ablegen klartext[i] := chr(acode); end; end; Grüße Klaus |
Re: RSA verschlüsselung funktioniert nicht...
genau, dass hatte ich vorher auch so...
aber ich benutze extended, weil der wert von acode bei ca 3,6*10^46 liegt --> integer ist nicht ausreichend um dies darzustellen... ich kopiere mal das, was delphi mir als fehlermeldung raushaut, vielleicht, bringt das weiter... Dies wird von delphi ausgegeben... [DCC Fehler] ukrypto.pas(70): E2032 FOR-Schleifenvariable muss von ordinalem Typ sein [DCC Fehler] ukrypto.pas(73): E2010 Inkompatible Typen: 'Integer' und 'Single' [DCC Fehler] ukrypto.pas(77): E2010 Inkompatible Typen: 'Integer' und 'Single' [DCC Fehler] ukrypto.pas(77): E2008 Inkompatible Typen [DCC Fehler] umain.pas(8): F2063 Verwendete Unit 'ukrypto.pas' kann nicht compiliert werden |
Re: RSA verschlüsselung funktioniert nicht...
Also das untere wird bei mir ohne Problem compiliert.
Delphi-Quellcode:
Deine Fehler müssen woanders stecken.
procedure entschluesseln(klarText:String;codetext:String);
var i : Integer; acode : int64; // auf int64 geändert begin // Klartext zu ASCII for i := 1 to length (klartext) do begin // 1 ASCII- Code der i-ten Buchstaben ermitteln acode := ord(codetext[i]); // 2 Durch formel ( M = C^d mod N ) verschlüsseln acode := (acode - round(exp(23*ln(146))) mod 187); // 3 Das Zweichen mit dem ASCII- Code acode an der i-ten Stelle im chiffre ablegen klartext[i] := chr(acode); end; end; procedure TForm1.Button1Click(Sender: TObject); begin entschluesseln(edit1.Text,edit2.Text); end; Grüße Klaus |
Re: RSA verschlüsselung funktioniert nicht...
Dann verwendest du irgendwo noch Singles.
|
Re: RSA verschlüsselung funktioniert nicht...
Liste der Anhänge anzeigen (Anzahl: 1)
dann haut der mir noch mehr fehler raus aus der system datei...
ich hab mal das projekt in den anhang gestellt, vielleicht kannst du damit ja was anfangen *hoff* danke nochmal.. ich hab solangsam keine ahnung mehr woran das liegt... nice greetz Bblackhaek |
Re: RSA verschlüsselung funktioniert nicht...
Zitat:
Verschlüsseln:
Delphi-Quellcode:
Hinweis: round(exp(7*ln(5)) mod 187 = 5^7 mod 187 = 146.
// 2 Durch formel ( C = M^e mod N ) verschlüsseln
// acode := (acode + round(exp(7*ln(5))) mod 187); acode := (acode + 146) mod 187; Entschlüsseln:
Delphi-Quellcode:
Hinweis: 41 = -146 mod 187.
// 2 Durch formel ( M = C^d mod N ) verschlüsseln
// acode := (acode - round(exp(23*ln(146))) mod 187); acode := (acode + 41) mod 187; Gruß Gammatester |
Re: RSA verschlüsselung funktioniert nicht...
das das noch kein wirklicher rsa ist, ist mir klar, anstatt der zahlen, kommen da noch varablen hin, nur erstmal muss das generell funktionieren...
die zahlen sind nur ein beispiel, ich werde das, wenn das mit den beispielzahlen klappt, noch erweitern und mit edit fenstern machen... muss nur erstmal klappen ;) |
Re: RSA verschlüsselung funktioniert nicht...
Hallo,
im Prinzip sollte RSA so laufen. Problem dabei ist, es kommen dabei sehr große Zahlen ins Spiel. Da reicht int64 nicht mehr. Hier im Forum gibt es einige Beispiele mit BigInt. Diese Typen wären dazu eher geeignet. Grüße Klaus
Delphi-Quellcode:
{
RSA : p=7 q=11 p * q = 77 = N phi(N) = (p-1)* (q-1) = 60 e teilerfremd zu phi(N) = 23 -> e=23 und N=77 public Key wird zum Verschlüsseln benötigt Berechnung der inversersen zu e e* d +k * phi(N) ? 1 = ggT(e,phi(N)) 23 * d + k * 60 = 1 = ggT(23,60) 23 * 47 + (-18) * 60 = 1 -> d = 47 N=77 -> privater Schlüssel } // für power die math unit einbinden procedure tcodiermaschine.verschluesseln; var i, acode : integer; begin // Klartext zu ASCII for i := 1 to length (klartext) do begin // 1 ASCII- Code der i-ten Buchstaben ermitteln acode := ord(Klartext[i]); // 2 Durch formel ( C = M^e mod N ) verschlüsseln acode := round(power(acode,23)) mod 77; // 3 Das Zweichen mit dem ASCII- Code acode an der i-ten Stelle im chiffre ablegen codetext[i] := chr(acode); end; end; procedure tcodiermaschine.entschluesseln; var i : integer; var acode : int64; begin // Klartext zu ASCII for i := 1 to length (klartext) do begin // 1 ASCII- Code der i-ten Buchstaben ermitteln acode := ord(codetext[i]); // 2 Durch formel ( M = C^d mod N ) verschlüsseln acode := round(power(acode,47)) mod 77; // 3 Das Zweichen mit dem ASCII- Code acode an der i-ten Stelle im chiffre ablegen klartext[i] := chr(acode); end; end; |
Re: RSA verschlüsselung funktioniert nicht...
vllt dummer frage, aber wie binde ich die "math" unit ein??
:oops: |
Re: RSA verschlüsselung funktioniert nicht...
Zitat:
Delphi-Quellcode:
uses math
|
Re: RSA verschlüsselung funktioniert nicht...
wenn ich jetz versuche mein projekt zu compilieren kommt folgender fehler:
Erste Gelegenheit für Exception bei $7C812A7B. Exception-Klasse EInvalidOp mit Meldung 'Invalid floating point operation'. Prozess krypto.exe (2096) ich weiß nicht mehr was ich machen soll :( |
Re: RSA verschlüsselung funktioniert nicht...
Guten Morgen,
die Meldung kommt nicht beim Kompilieren sondern wenn Du das Programm ausführst. Wie in meinem letzten Beitrag schon erwähnt kommen hier recht schnell sehr große Zahlen zustande. Deine Fehlermeldung ist das Resultat davon. Die Zahlen verlassen den zulässigen Wertebereich. Du könntest Deinen Versuch mit kleineren Primzahlen durchführen. Damit wird auch e und d kleiner. Oder schau Dir einmal das ![]() großen Zahlen umgehen. Grüße Klaus |
Re: RSA verschlüsselung funktioniert nicht...
Zitat:
Statt der Powerroutine aus math kann er mal folgende Integer-Power-Funktionn verwenden:
Delphi-Quellcode:
Ergebnis von IPowMod(123,60000,997) ist zB 966. 123^60000 ist ein Zahl mit über 400000 Bits also riesig im Verbleich mit den 64 Bits von double.
function IPowMod(a,b,n: int64): int64;
{-Berechnet a^b mod n} var p: int64; begin p := 1; while b > 0 do begin while b and 1 = 0 do begin b := b shr 1; a := (a * a) mod n; end; dec(b); p := (p * a) mod n; end; IPowMod := p; end; Gruß Gammatester |
Re: RSA verschlüsselung funktioniert nicht...
warscheinlich nerv ich euch schon so richtig, aber entweder bin ich einfach zu dumm oder es geht einfach nicht...
wenn ich die function IPowMod inplementiere, dann bekomm ich schon wieder fehlermeldungen rausgehaun... und zwar folgende: [DCC Fehler] ukrypto.pas(17): E2065 Ungenügende Forward- oder External-Deklaration: 'tcodiermaschine.IPowMod' [DCC Fehler] krypto.dpr(5): F2063 Verwendete Unit 'ukrypto.pas' kann nicht compiliert werden könnt ihr mir vllt nochmal helfen, wär echt nett von euch :oops: Vielen dank nochmal und nochmal im voraus... nice greetz Bblackhawk |
Re: RSA verschlüsselung funktioniert nicht...
Zitat:
IPowMod muss im Quellcode vor der Verwendung stehen und muß nicht mit tcodiermaschine.IPowMod aufgerufen werden, nur zB i:=IPowMod(2,10,55); Gammatester |
Re: RSA verschlüsselung funktioniert nicht...
füge die Funktion vor die Methoden, kodieren und dekodieren ein.
Oder mache aus Ihr eine Methode Deines Objektes. Grüße Klaus |
Re: RSA verschlüsselung funktioniert nicht...
der will bei mir immernoch nich...
ich stelle euch mal zur show, was ich da gebaut hab (is aus der klasse ukrypto)...
Delphi-Quellcode:
so, dann gehts weiter mit der IPowMod
UNIT ukrypto;
INTERFACE USES sysutils; TYPE tcodiermaschine=class(TObject) private klartext,codetext: string; public constructor create; function IPowMod(a,b,n:int64): int64; procedure setklartext(text: string); procedure setchiffre(text: string); function getklartext: string; function getchiffre: string; procedure verschluesseln(c: string);virtual; procedure entschluesseln(c: string);virtual; end;
Delphi-Quellcode:
(steht direkt hinter dem Constructor)
function IPowMod(a,b,n: int64): int64;
{-Berechnet a^b mod n} var p: int64; begin p := 1; while b > 0 do begin while b and 1 = 0 do begin b := b shr 1; a := (a * a) mod n; end; dec(b); p := (p * a) mod n; end; IPowMod := p; end; so und zum schluss die procedure zum verschlüsseln...
Delphi-Quellcode:
folgende Fehler:
procedure tcodiermaschine.entschluesseln;
var i : integer; var acode : int64; begin // Klartext zu ASCII for i := 1 to length (klartext) do begin // 1 ASCII- Code der i-ten Buchstaben ermitteln acode := ord(codetext[i]); // 2 Durch formel ( M = C^d mod N ) verschlüsseln acode := IPowMod( a:146, b:23, n:187 ); //(acode - round(exp(23*ln(146))) mod 187); // 3 Das Zweichen mit dem ASCII- Code acode an der i-ten Stelle im chiffre ablegen klartext[i] := chr(acode); end; end; [DCC Fehler] ukrypto.pas(93): E2003 Undefinierter Bezeichner: 'a' [DCC Fehler] ukrypto.pas(97): E2029 '.' erwartet, aber ';' gefunden [DCC Fehler] ukrypto.pas(11): E2065 Ungenügende Forward- oder External-Deklaration: 'tcodiermaschine.IPowMod' [DCC Fehler] krypto.dpr(5): F2063 Verwendete Unit 'ukrypto.pas' kann nicht compiliert werden wie gesagt, keine ahnung mehr... vielen dank wiedermal für die hilfe... very nice greetz Bblackhawk |
Re: RSA verschlüsselung funktioniert nicht...
Hallo,
wenn Du das so machst:
Delphi-Quellcode:
dann solltest Du dies so machen:
UNIT ukrypto;
INTERFACE USES sysutils; TYPE tcodiermaschine=class(TObject) private klartext,codetext: string; public constructor create; function IPowMod(a,b,n:int64): int64; procedure setklartext(text: string); procedure setchiffre(text: string); function getklartext: string; function getchiffre: string; procedure verschluesseln(c: string);virtual; procedure entschluesseln(c: string);virtual; end;
Delphi-Quellcode:
Grüße
function tcodiermaschine.IPowMod(a,b,n: int64): int64;
{-Berechnet a^b mod n} var p: int64; begin p := 1; while b > 0 do begin while b and 1 = 0 do begin b := b shr 1; a := (a * a) mod n; end; dec(b); p := (p * a) mod n; end; IPowMod := p; end; Klaus |
Re: RSA verschlüsselung funktioniert nicht...
da hab ich wieder ein diesmal aber kleines problem :oops:
Delphi-Quellcode:
wenn ich das so schreibe sagt der mir:
procedure tcodiermaschine.entschluesseln;
var i : integer; var acode : int64; begin // Klartext zu ASCII for i := 1 to length (klartext) do begin // 1 ASCII- Code der i-ten Buchstaben ermitteln acode := ord(codetext[i]); // 2 Durch formel ( M = C^d mod N ) verschlüsseln acode := IPowMod( a:146, b:23, n:187 ); //(acode - round(exp(23*ln(146))) mod 187); // 3 Das Zweichen mit dem ASCII- Code acode an der i-ten Stelle im chiffre ablegen klartext[i] := chr(acode); end; end; [DCC Fehler] ukrypto.pas(93): E2003 Undefinierter Bezeichner: 'a' [DCC Fehler] ukrypto.pas(97): E2029 '.' erwartet, aber ';' gefunden [DCC Fehler] krypto.dpr(5): F2063 Verwendete Unit 'ukrypto.pas' kann nicht compiliert werden wie soll ich das sons schreiben???? is doch genau wie die struktur bei IPowMod... nice greetz Bblackhawk |
Re: RSA verschlüsselung funktioniert nicht...
Vielleicht so:
Delphi-Quellcode:
Du solltest IPowMod mit Parametern füttern, die Namen der Paramter
acode := IPowMod(146,23,187 )
werden da nicht mehr gebraucht. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz