Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Rijndael-ECB-Entschlüsselung mit DEC (https://www.delphipraxis.net/116824-rijndael-ecb-entschluesselung-mit-dec.html)

egal 7. Jul 2008 10:22


Rijndael-ECB-Entschlüsselung mit DEC
 
Hallo,
brauche schon weider eure Hilfe. Irgendwie komme ich nicht zurecht mit ECB und DEC...
Ich habe eine Datei, die mit ECB verschlüsselt wurde, allerdings in C#, mir ist Key, IV und KeySize bekannt. Aber Entschlüsselung klappt nicht.
Hier ist mein Stück Code, bestimmt mache ich was falsch...
Delphi-Quellcode:
procedure Encrypt(ASource, ADest: TStream; const APassword: String); overload;
const
  ACipherClass: TDECCipherClass = TCipher_Rijndael;
  ACipherMode: TCipherMode = cmECBx;
var
  cIV: Binary;
begin
  with ValidCipher(ACipherClass).Create do
  try
    cIV := '1234567891011123'; // IV
    Mode := ACipherMode;
    // APassword-mein Key
    Init(APassword, Length(APassword), cIV, Length(cIV));
   
    EncodeStream(ASource, ADest, -1, nil);
  finally
    Free;
    ProtectBinary(cIV);
  end;
end;
Verstehe auch nicht, wo ich KeySize=256 verwenden soll? Vielen Dank im Voraus!

BUG 7. Jul 2008 10:49

Re: Rijndael-ECB-Entschlüsselung mit DEC
 
Zitat:

Zitat von egal
Verstehe auch nicht, wo ich KeySize=256 verwenden soll?

Soweit ich weiß, passt das DEC die Schlüssellänge dem Passwort an. [Quelle]

MfG,
Bug

gammatester 7. Jul 2008 10:52

Re: Rijndael-ECB-Entschlüsselung mit DEC
 
Der erste Schritt sollte sein, daß Du nicht noch mal verschlüsselt und sowas wie DecodeStream benutzt. Schlüsselgröße wird in Init angegeben, ungefähr so:

Delphi-Quellcode:
var
  AES: TCipher_Rijndael;
begin
  AES := TCipher_Rijndael.Create;
  AES.Mode := cmECBx;
  AES.Init(key256,32,IV,16);
  {...}
end
[Edit]Normalerweise brauch man allerdings keinen IV für ECB[/Edit]

Gruß Gammatester

egal 7. Jul 2008 11:26

Re: Rijndael-ECB-Entschlüsselung mit DEC
 
Zitat:

Zitat von BUG
Soweit ich weiß, passt das DEC die Schlüssellänge dem Passwort an.

Ich habe noch genauer C#-Code angeschaut, da steht eigentlich myRijndael.KeySize = 256, aber ich vermute, dass es hier um Blocksize geht und nicht um Keysize, weil Key nur 32 bit lang ist.

egal 7. Jul 2008 11:31

Re: Rijndael-ECB-Entschlüsselung mit DEC
 
Zitat:

Zitat von gammatester
Der erste Schritt sollte sein, daß Du nicht noch mal verschlüsselt und sowas wie DecodeStream benutzt.

Nein das mache ich nicht und Schlüsselgröße gebe ich eigentlich richtig in Init an. Ich versuche dann jetzt am besten eine Datei in Delphi verschlüsseln und entschlüsseln, vielleicht ist die verschlüsselte Datei daran schuld...

Luckie 7. Jul 2008 11:34

Re: Rijndael-ECB-Entschlüsselung mit DEC
 
Zitat:

Zitat von egal
Zitat:

Zitat von gammatester
Der erste Schritt sollte sein, daß Du nicht noch mal verschlüsselt und sowas wie DecodeStream benutzt.

Nein das mache ich nicht

Doch tust du. Aus deinem obigen Code:
Delphi-Quellcode:
EncodeStream(ASource, ADest, -1, nil);
Wenn du entschlüsseln willst, wäre wohl DecodeStream die richtige Methode.

gammatester 7. Jul 2008 11:39

Re: Rijndael-ECB-Entschlüsselung mit DEC
 
Zitat:

Zitat von egal
Zitat:

Zitat von BUG
Soweit ich weiß, passt das DEC die Schlüssellänge dem Passwort an.

Ich habe noch genauer C#-Code angeschaut, da steht eigentlich myRijndael.KeySize = 256, aber ich vermute, dass es hier um Blocksize geht und nicht um Keysize, weil Key nur 32 bit lang ist.

256 ist die Schlüsselgröße in Bits also 32 Bytes. Ich gehe davon aus, daß Dein C# nur die AES-Blockgröße von 128 Bits unterstützt, alles andere wäre heutzutage ungewöhnlich.

Gruß Gammatester

egal 7. Jul 2008 12:05

Re: Rijndael-ECB-Entschlüsselung mit DEC
 
Zitat:

Zitat von Luckie
Wenn du entschlüsseln willst, wäre wohl DecodeStream die richtige Methode.

Echt, ich war fest überzeugt, dass man bei der Entschlüsselung EncodeStream nehmen soll... Aber, wenn ich Decodestream benutze, dann wird die Datei trotzdem nicht richtig entschlüsselt. Diese Initroutine macht mir Sorgen...

gammatester 7. Jul 2008 12:27

Re: Rijndael-ECB-Entschlüsselung mit DEC
 
Zitat:

Zitat von egal
Zitat:

Zitat von Luckie
Wenn du entschlüsseln willst, wäre wohl DecodeStream die richtige Methode.

Echt, ich war fest überzeugt, dass man bei der Entschlüsselung EncodeStream nehmen soll... Aber, wenn ich Decodestream benutze, dann wird die Datei trotzdem nicht richtig entschlüsselt. Diese Initroutine macht mir Sorgen...

Bist Du sicher, daß Dein Passwort=Schlüssel exakt 32 Zeichen bzw. Bytes enthält? Andernfalls wird es nämlich mit 0 aufgefüllt (aber nur wenn's mindestens 25 Zeichen hat, sonst wird ein 192Bit-Schlüssel benutzt). Wie wird es denn in C# gemacht? Vielleicht ist es besser, in Delphi ein array[0..31] of byte oder array[0..31] of char zu benutzen.

Gruß Gammatester

egal 7. Jul 2008 14:09

Re: Rijndael-ECB-Entschlüsselung mit DEC
 
Zitat:

Zitat von gammatester
Bist Du sicher, daß Dein Passwort=Schlüssel exakt 32 Zeichen bzw. Bytes enthält?

Ja, Passwort hat 32 Zeichen, aber ich habe rausgefunden, woran es lag. Wenn ich bei der Init-Routine nur Passwort ohne IV eingebe, dann klappt's, zumindest in Delphi. Jetzt muss man nur C#-Code entsprechend anpassen.

Einen großen Dank an alle Helfer an dieser Stelle!!! :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 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