![]() |
AW: Probleme mit DCPcrypt
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
edit Im Anhang der Source zum Sample |
AW: Probleme mit DCPcrypt
Dein Sourcecode und wohl auch die Exe enthalten kein Entfernen des Paddings und ergeben deshalb Schrott. Mit dieser meiner Änderung funktionierts
Verschlüsseln 'Edit1' -> 'zwag7rEW4OWtTLpCHdbyoA==' Entschlüsseln: 'zwag7rEW4OWtTLpCHdbyoA==' -> 'Edit1'
Delphi-Quellcode:
function DecryptText():String;
var Cipher : TDCP_rijndael; Data, Key, IV : ansistring; index, dataLength, bsize, pad: integer; begin key := '12345678901234567890123456789012'; IV := '1234567890123456'; Data := DCPBase64.Base64DecodeStr(form1.Edit1.text); Cipher := TDCP_rijndael.Create(NIL); try Cipher.Init(Key[1],128,@IV[1]); Cipher.DecryptCBC(Data[1],Data[1],Length(Data)); pad := 16- ord(Data[length(Data)]); for index :=1 to pad do delete(Data,length(Data),1); finally Cipher.Burn; Cipher.Free; end; form1.Memo1.Lines.Add(Data); end; |
AW: Probleme mit DCPcrypt
Zitat:
Wenn man natürlich stur seinen Willen haben möchte ohne überhaupt mal das andere ausprobiert zu haben. Nutze mein .exe oder .dpr und bau eigenes .exe Bedien es wie ich schrieb Was soll bitteschön Schrott sein? Hättest Du geschrieben das meine Methode Schrott ist weil sie führende oder abschließende Leerzeichen entfernt, da hät ich Dir Recht gegeben aber Grundlos so etwas zu Schreiben. Ich bin raus. edit und das beste, ohne Trim funktioniert dein Source null. Tolle Leistung. Aber mein Source = Schrott. |
AW: Probleme mit DCPcrypt
Sorry, falls der Ton etwas rauh war.
Aber Dein Programm funktioniert, nur wenn der Text keine Ansizeichen <= 32 am Ende hat. Das ist vielleicht für das Ver/Entschlüsseln von Edit-Felder OK, aber nicht für allgemeine Daten. Aber selbst führende Leerzeichen werden weggetrimmt. Versuche einmal ' a b c ' mit Deiner Version zu verarbeiten. Mit dem trim gibt das Entschlüsseln 'a b c', und wenn man das trim entfernt: ' a b c ???????' (im Original: Krakel statt ?) Der Ciphertext ist für beide Versionen 'YEasidM6jJlOuYsjSFIliA==' Allerdings muss ich sagen, das es für solche eingeschränkten Daten (also ohne führende und angehängte Leer- und Steuerzeichen) in der Tat zu funktioieren scheint, weil die Padding-Bytes <= #16 sind, die beim trim dann entfernt werden. Und mein Program funktioniert auch nur, wenn das trim entfernt wird (aber das war schon vorhanden, ich wollte nur das De-Padding einbauen, habe das trim jetzt im Code entfernt). Ich verstehe nicht, wieso es mein Code bei Dir nicht funktioniert, wenn das Trim entfernt wird. Gute Nacht Gammatester |
AW: Probleme mit DCPcrypt
Liste der Anhänge anzeigen (Anzahl: 1)
Ok gammatester, nur für Dich um Dir zu zeigen was da so passiert bei mir mit Deiner Änderung in Deiner letzten Variante.
Ich habe nun zwei Checkboxen drinn, GUI mini aufgewertet. Checkbox1 ist dein Padding, On/Off. Checkbox2 ist mein Trim, On/Off. GUI ist diesmal beschriftet.
Delphi-Quellcode:
Im Anhang kompilat plus Source.
function DecryptText():String;
var Cipher : TDCP_rijndael; Data, Key, IV : ansistring; index, dataLength, bsize, pad: integer; begin key := '12345678901234567890123456789012'; IV := '1234567890123456'; Data := form1.Edit1.text; Data := DCPBase64.Base64DecodeStr(Data); Cipher := TDCP_rijndael.Create(NIL); try Cipher.Init(Key[1],128,@IV[1]); Cipher.DecryptCBC(Data[1],Data[1],Length(Data)); if form1.CheckBox1.Checked then begin pad := 16- ord(Data[length(Data)]); for index :=1 to pad do delete(Data,length(Data),1); end; finally Cipher.Burn; Cipher.Free; end; if form1.CheckBox2.Checked then form1.Memo1.Lines.Add(Trim(Data)) else form1.Memo1.Lines.Add(Data); if form1.CheckBox2.Checked then form1.Edit1.Text := Trim(Data) else form1.Edit1.Text := Data; end; Sobald ich "mein" häckchen entferne, rate was passiert, das was der TE weg haben wollte erscheint wieder. |
AW: Probleme mit DCPcrypt
Moin,
ich konnte das Problem mit dem De-Padding reproduzieren. Ich habe in der Hektik meinen eigenen Pseudo-Code falsch umgesetzt :wall:. Mit dieser Änderung Deines Codes sollte es OK sein
Delphi-Quellcode:
Natürlich ist das trotzdem noch eine Schnell-Lösung. Ein robuster Code sollte auch noch checken, ob der eingegebene Text für die Entschlüsselung gültiges Base64 ist, ob die Ciphertext-Länge ein Vielfaches von 16 ist, etc.
if form1.CheckBox1.Checked then
begin pad := ord(Data[length(Data)]); for index :=1 to pad do delete(Data,length(Data),1); end; |
AW: Probleme mit DCPcrypt
Delphi-Quellcode:
for index :=1 to pad do delete(Data,length(Data),1);
wer sieht auch sofort, dass der Herr Mathematik das FOR sofort und mit nur einem Handgriff entfernen kann? PS: StringOfChar für die andere Richtung. |
AW: Probleme mit DCPcrypt
Zitat:
Zitat:
Delphi-Quellcode:
Ich glaube SetLength() ist die schnellste von diesen Möglichkeiten. Ich nutze es jedenfalls.
Delete(Data, Length(Data) +1 -pad, pad);
//oder SetLength(Data, Length(Data) -pad); //oder Data := Copy(Data, 1, Length(Data) -pad); |
AW: Probleme mit DCPcrypt
Ich danke euch sehr für eure Hilfe! Klasse... echt !
Eine kurze Frage hab ich noch, kann ich auch Buchstaben als Key wählen ? Und muss dieser immer 32 zeichen lang sein ? |
AW: Probleme mit DCPcrypt
Delphi-Quellcode:
Es sind AnsiStrings, trag da ein was auch immer Du magst.
key := 'Super Geheim';
IV := 'DLX'; Ps: Alternativ kannst Du es auch so machen:
Delphi-Quellcode:
Und Du rufst die Funktion mit entsprechenden Parameter auf.
function DecryptText(const Key, IV: AnsiString):String;
Also so:
Delphi-Quellcode:
function DecryptText(const Key, IV: AnsiString):String;
var Cipher : TDCP_rijndael; Data : ansistring; //Key, IV : ansistring; // <- Das hier rauswerfen index, dataLength, bsize, pad: integer; begin // key := '12345678901234567890123456789012'; // <- Das hier rauswerfen // IV := '1234567890123456'; // <- Das hier rauswerfen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 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