AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi dcpcrypt + Delphi 2009 = falsches en/decryption
Thema durchsuchen
Ansicht
Themen-Optionen

dcpcrypt + Delphi 2009 = falsches en/decryption

Ein Thema von Hedge · begonnen am 4. Dez 2009 · letzter Beitrag vom 4. Dez 2009
Antwort Antwort
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#1

dcpcrypt + Delphi 2009 = falsches en/decryption

  Alt 4. Dez 2009, 20:44
Ich habe heute die aktuelle Version von dcpcrypt die für Delphi 2009 geeignet sein soll installiert.

Auf der Seite von dcpcrypt gibt es ein Beispiel zur Kommunikation mit PHP-Scripts.

Die bereits kompilierte Exe funktioniert tadellos (nach encrypten einer Zeichenkette wieder in die Ausgangszeichenfolge decrypten).

Wenn ich das Beispiel selbst kompiliere kommt ein ganz anderer Ciphertext beim encrypten raus und entsprechend auch ein falsches Ergebnis beim decrypten.

Der Code ent- und verschlüsseln ist folgender:

Delphi-Quellcode:
// Encrypt a string and return the Base64 encoded result
procedure TfrmMain.btnEncryptClick(Sender: TObject);
var
  Cipher : TDCP_rijndael;
  Data, Key, IV : string;
begin
  // Pad Key, IV and Data with zeros as appropriate
  Key := PadWithZeros(boxKey.Text,KeySize);
  IV := PadWithZeros(boxIV.Text,BlockSize);
  Data := PadWithZeros(boxPlainTextIn.Text,BlockSize);
  // Create the cipher and initialise according to the key length
  Cipher := TDCP_rijndael.Create(Self);
  if Length(boxKey.Text) <= 16 then
    Cipher.Init(Key[1],128,@IV[1])
  else if Length(boxKey.Text) <= 24 then
    Cipher.Init(Key[1],192,@IV[1])
  else
    Cipher.Init(Key[1],256,@IV[1]);
  // Encrypt the data
  Cipher.EncryptCBC(Data[1],Data[1],Length(Data));
  // Free the cipher and clear sensitive information
  Cipher.Free;
  FillChar(Key[1],Length(Key),0);
  // Display the Base64 encoded result
  boxCipherTextOut.Text := Base64EncodeStr(AnsiString(Data));
end;

procedure TfrmMain.btnDecryptClick(Sender: TObject);
var
  Cipher : TDCP_rijndael;
  Data, Key, IV : string;
begin
  // Pad Key and IV with zeros as appropriate
  Key := PadWithZeros(boxKey.Text,KeySize);
  IV := PadWithZeros(boxIV.Text,BlockSize);
  // Decode the Base64 encoded string
  Data := Base64DecodeStr(AnsiString(boxCipherTextIn.Text));
  // Create the cipher and initialise according to the key length
  Cipher := TDCP_rijndael.Create(Self);
  if Length(boxKey.Text) <= 16 then
    Cipher.Init(Key[1],128,@IV[1])
  else if Length(boxKey.Text) <= 24 then
    Cipher.Init(Key[1],192,@IV[1])
  else
    Cipher.Init(Key[1],256,@IV[1]);
  // Decrypt the data
  Cipher.DecryptCBC(Data[1],Data[1],Length(Data));
  // Free the cipher and clear sensitive information
  Cipher.Free;
  FillChar(Key[1],Length(Key),0);
  // Display the result
  boxPlainTextOut.Text := Data;
end;
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: dcpcrypt + Delphi 2009 = falsches en/decryption

  Alt 4. Dez 2009, 20:52
Könnte ein AnsiString/WideString-Problem sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#3

Re: dcpcrypt + Delphi 2009 = falsches en/decryption

  Alt 4. Dez 2009, 20:53
Habe gerade mal die anderen Beispiele probiert (Dateiverschlüsselung).

Die funktionieren tadellos.
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: dcpcrypt + Delphi 2009 = falsches en/decryption

  Alt 4. Dez 2009, 22:18
Zitat von Hedge:
Habe gerade mal die anderen Beispiele probiert (Dateiverschlüsselung).

Die funktionieren tadellos.
Dann wird es wohl ein Ansi/Unicodeproblem sein. Bei Ansi ist 1 Zeichen = 1 Byte, Bei Unicode (UTF16 als normalcodierung unter Windows) ist 1 Zeichen = 2-4 Byte!

Also entweder auf Delphi-Seite auf Ansi-Strings umstellen oder die PHP-Seite auf Unicode/UTF16.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#5

Re: dcpcrypt + Delphi 2009 = falsches en/decryption

  Alt 4. Dez 2009, 22:30
Es geht ja noch nichtmal um den Austausch zwischen PHP und Delphi.

Ich will einfach nur (im Delphiprogramm) die selbe Zeichenkette nach dem verschlüsseln und entschlüsseln wieder zurückkriegen die ich davor auch eingegeben habe.
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: dcpcrypt + Delphi 2009 = falsches en/decryption

  Alt 4. Dez 2009, 22:36
Zitat von Hedge:
Ich will einfach nur (im Delphiprogramm) die selbe Zeichenkette nach dem verschlüsseln und entschlüsseln wieder zurückkriegen die ich davor auch eingegeben habe.
dann must du mit Ansi-Strings arbeiten damit wieder 1 Character = 1 Byte wird.

Du müsstest festellen das eine verschlüsselten Datenströme normalerweise doppelt so große Dateien als früher erzeugen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#7

Re: dcpcrypt + Delphi 2009 = falsches en/decryption

  Alt 4. Dez 2009, 22:38
Im ganzen dcpcrypt-2009 werden nackte strings nur für GetAlgorithm/Namen etc benutzt. Verschlüsselt und codiert wird immer mit ansistrings. Also solltest Du (wie mkinzler schon angedeutet hat) Deine Datenstrings als ansistrings deklarieren:var Data, Key, IV : ansistring; Ich unterstelle mal, daß die Dateiverschlüsselung sinnvollerweise mit bytes (und nicht mit diesen unsinnigen Strings) arbeitet. Also wäre es kein Wunder, wenn es da klappt.

Im übrigen scheinen die Konstanten (16, 128 etc) für Unicodestrings um den Faktor 2 falsch zu sein.

Gruß Gammatester
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#8

Re: dcpcrypt + Delphi 2009 = falsches en/decryption

  Alt 4. Dez 2009, 22:45
Ohje, das ist wieder selten dämlich.

Ich habe überall in der gesamten Komponente aus den Strings AnsiStrings gemacht, aber in meinem eigenen Projekt habe ich es schleifen lassen.

Tut mir vielmals leid euch damit aufgehalten zu haben.
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz