![]() |
Probleme mit DCPcrypt
Hallo,
ich verwende DCPcrypt zum ver- und entschlüsseln von Text. Das klappt soweit auch Prima, jedoch hab ich das Problem das irgendwelche komischen Sonderzeichen beim entschlüsseln angehängt werden, habt ihr eine Lösung dafür ?
Code:
Ich hoffe Ihr habt eine Idee, Danke schonmal :-)
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,DCPcrypt2, DCPblockciphers, DCPrijndael, DCPbase64, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Edit1: TEdit; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} 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)); finally Cipher.Burn; Cipher.Free; end; form1.Memo1.Lines.Add(Data); end; function EncryptText():String; var Cipher : TDCP_rijndael; Data,DataDec, Key, IV : ansistring; index, dataLength, bsize, pad: integer; begin key := '12345678901234567890123456789012'; IV := '1234567890123456'; //Data := 'thisis128bitstxt'; Data := form1.edit1.text; Cipher := TDCP_rijndael.Create(nil); try Cipher.Init(Key[1],128,@IV[1]); //don't miss padding {start padding} dataLength := Length(Data); bsize := (Cipher.BlockSize div 8); pad := bsize - (dataLength mod bsize); for index := 1 to pad do Data := Data+chr(pad); {end padding} Cipher.EncryptCBC(Data[1],Data[1],Length(Data)); finally Cipher.Burn; Cipher.Free; end; Data := DCPBase64.Base64EncodeStr(Data); form1.Memo1.Lines.Add(Data); end; procedure TForm1.Button1Click(Sender: TObject); begin EncryptText(); end; procedure TForm1.Button2Click(Sender: TObject); begin DecryptText(); end; procedure TForm1.FormCreate(Sender: TObject); begin end; end. Grüße |
AW: Probleme mit DCPcrypt
DCPcrypt von welcher Quelle?
![]() ![]() ![]() |
AW: Probleme mit DCPcrypt
DCPcrypt v2.0 written by David Barton
|
AW: Probleme mit DCPcrypt
Das werden die Padding-Bytes sein. Ich sehe sie beim Verschlüsseln aber nicht beim Entschlüsseln. Lösungen:
|
AW: Probleme mit DCPcrypt
weiß jemand wie der code für das padding beim entschlüsseln wäre ?
|
AW: Probleme mit DCPcrypt
Zitat:
Code:
So wie ich den Source für's Verschlüsseln sehe, werden immer 1..16 Bytes angehängt.
pad := ord(Data[length(Data)])
Entferne die letzten pad Bytes/Ansichars von Data |
AW: Probleme mit DCPcrypt
Ersetze bei Dir
Delphi-Quellcode:
mit
form1.Memo1.Lines.Add(Data);
Delphi-Quellcode:
und dann passt es.
form1.Memo1.Lines.Add(Trim(Data));
In der DecryptText() funktion, falls das unklar ist. ps: Ich habe die Sourceforge Variante genommen. pps: Der Fehler ist das der Speicher überschrieben wird aber keine neue Länge bekommt. |
AW: Probleme mit DCPcrypt
Zitat:
Beim Verschlüsseln wird Data auf ein Vielfaches von 16 aufgefüllt (ohne Speicherüberschreibung). Ich nehme ja wohl an, dass dieser verschlüsselte Text dann komplett wieder entschlüsselt wird. Da die Länge ein Vielfaches von 16 ist, kann er im CBC-Mode verarbeitet werden. Was übrigbleibt nach dem Entschlüsseln ist der Klartext+Padding, was noch entfernt werden muss. Das Padding hängt n Bytes AnsiChar(n) an, wobei n = 16 - mod Klartextlänge ist. Mein Pseudocode macht das rückgängig. Zitat:
Edit: Sehe gerade das über Base64 gegangen wird, da sollte trim kein Problem sein, weil im Base64 keine relevanten Nicht-Ansidaten vorhanden sind. Aber das kann nicht das Problem sein, weil DCPBase64.Base64DecodeStr(Data) einen Fehler werfen müsste, falls ungültige Zeichen auftauchen. |
AW: Probleme mit DCPcrypt
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang ein dreckiges aber lauffähiges Beispiel.
Umgang: Bei Erststart tippe da wo Edit1 steht etwas ein was Du verschlüsseln magst Drücke Knopf Button1 In Memo erscheint der Base64 String kopiere ihn Ersetze Edit1 mit dem String Drücke Knopf Button2 Klappts? |
AW: Probleme mit DCPcrypt
Wäre es nicht sinnvoller den Quellcode zu posten, als ein nacktes EXE?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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