![]() |
Rijndael decrypt mit Passwort & IV als Passphrase
Hallo,
ich versuche gerade einen Block mit TDCP_Rijndael zu entpacken aber ich habe den Key & IV als String. In den C Rijndael's gibt es dort ein MakeKey(... Hat jemand einen Tip wie das hier gemacht wird ? Ich kann ja wahrscheinlich den Key&IV als String nicht so übergeben ? Danke
Delphi-Quellcode:
var Cipher : TDCP_Rijndael; begin Cipher := TDCP_Rijndael.Create(nil); try Cipher.MakeKey('Key16_123456789!','Vector16_1234567',16,16); <<<< ??? Cipher.Init(aKey, Length(aKey)*8, aPVector); Cipher.CipherMode := cmEBC; Cipher.DecryptStream(aInData, aOutData, aInData.Size); |
AW: Rijndael decrypt mit Passwort & IV als Passphrase
Zitat:
Makekey erweckt die Vorstellung, daß aus einer Passwort-Phrase ein Schlüssel erstellt werden soll: Welche KDF wird in C verwendet? Allerdings könnten die 16 Zeichen/Bytes eines Ansi-Strings auch direkt als Schlüssel verwendet werden. Sicherheitshalber sollte der Schüssel aber als Bytes vorliegen, sonst gibt es eventuell Problem mit 2-Byte-Unicode-Strings. |
AW: Rijndael decrypt mit Passwort & IV als Passphrase
Hallo gammatester,
das war die C Funktion dazu.
Code:
Der falsche Mode ist da aus einen Copy&Paste reingerutscht :)
//Expand a user-supplied key material into a session key.
// key - The 128/192/256-bit user-key to use. // chain - initial chain block for CBC and CFB modes. // keylength - 16, 24 or 32 bytes // blockSize - The block size in bytes of this Rijndael (16, 24 or 32 bytes). void CRijndael::MakeKey(char const* key, char const* chain, int keylength, int blockSize) |
AW: Rijndael decrypt mit Passwort & IV als Passphrase
OK, nehmen wird an, das ECB mit 128-Bit key vorliegt, dann sollte
es ungefähr so gehen
Delphi-Quellcode:
Das Problem mit DCPCrypt (so wie ich es kenne, zB dcpcrypt2-2010.zip) ist, daß EncryptECB nur einen 16-Byte-Block akzeptiert. Du mußt also in einer Schleife entschlüsseln.
var
AES: TDCP_rijndael; const key128: array[0..15] of Ansichar = 'Key16_123456789!'; var plain,ct: array[0..15] of byte ... AES.Init(key128,128,nil); AES.EncryptECB(plain,ct); Zu Testen kannst Du zB ![]() ![]() |
AW: Rijndael decrypt mit Passwort & IV als Passphrase
Mode ist CBC und dann a' 64 Byte Blöcke.
Das entpacken usw bekomme ich ja noch hin aber ich habe keine Ahnung von der Initialisierung mit den beiden String. Hier ist mal ein Beispiel von der C Unit ![]() Das CryptoTool ist ja sehr schön. Kannte ich gar nicht. Damit hat das AES entpacken funktioniert wenn ich dort meine beiden Strings unter Key & IV eingebe. |
AW: Rijndael decrypt mit Passwort & IV als Passphrase
Hier ein volständiges Programm analog zu C mit Ver- und Entschlüssseln (ich benutze Deinem IV in C hat man 16 0-Bytes).
Delphi-Quellcode:
Und das Ergebnis
program T_DCP;
{$apptype console} uses SysUtils, Classes, DCPcrypt2, DCPblockciphers, DCPrijndael; var AES: TDCP_rijndael; var sm_chain0: array[0..15] of Ansichar = 'Vector16_1234567'; key: array[0..15] of Ansichar = '1234567890123456'; szDataIn1: array[0..47] of Ansichar = 'ababababccccccccababababccccccccababababcccccccc'; procedure TestCBCDP; var i: integer; var tmp,szDataOut: array[0..47] of Ansichar; begin //fillchar(sm_chain0, sizeof(sm_chain0), 0); //Verschlüsseln AES.CipherMode := cmCBC; AES.Init(key,128,@sm_chain0); AES.EncryptCBC(szDataIn1,szDataOut,sizeof(szDataIn1)); writeln('Verschuesseln: '); writeln(szDataOut); //Entschlüsseln AES.CipherMode := cmCBC; AES.Init(key,128,@sm_chain0); AES.DecryptCBC(szDataOut,tmp,sizeof(szDataIn1)); writeln('Ver + Entschuesseln: ',tmp); end; begin AES := TDCP_rijndael.Create(nil); TestCBCDP; end.
Code:
C:\TMP\yy>T_DCP.exe
Verschuesseln: à¤┌é┴╠7}Ê©▄ÒáÁ¬, 3{┐Wf╔♣╣[G☺ Ver + Entschuesseln: ababababccccccccababababccccccccababababcccccccc |
AW: Rijndael decrypt mit Passwort & IV als Passphrase
Danke gammatester funzt perfekt.:)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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