Ich versuche gerade eine Verschlüsselung zwischen einer Delphi Anwendung und einem PHP Server zu verwirklichen. Gewählt habe ich dafür AES/rijndael-128. In beiden Fällen nutzte ich standart Komponenten.
Delphi: TDCP_rijndael Component (DCPcrypt Cryptographic Component
Library v2)
PHP: mcrypt-Module
Beide Seiten arbeiten,

Jedoch leider unterschiedlich

Die Ergebnisse der Verschlüsselungen passen nicht obwohl ich den selben Key und iv verwende. Ich habe nicht die leiseste Ahnung was ich falsch mache. Beispiele sowohl Ausgabe als auch Source sind unten. (Ich vermute, das der Fehler beim IV liegt)

Ist dort draussen IRGENDJEMAND der mir einen Hinweis geben kann
-------------------------------------------------------------
OUTPUT DELPHI
--------------------------------------------
Message (32): abcdefghABCDEFGHabcdefghABCDEFGH
key (8 ) : a7bc27da
iv (16 ): 1234567890123456
crypted dezimal (32): 186 235 158 205 73 220 102 143 180 191 61 223 142
151 162 105 49 42 14 146 177 40 148 37 165 219 5 11 196 50 223 5
decrypted (32): abcdefghABCDEFGHabcdefghABCDEFGH
--------------------------------------------
OUTPUT PHP
--------------------------------------------
Message (32): abcdefghABCDEFGHabcdefghABCDEFGH
key (8 ) : a7bc27da
iv (16): 1234567890123456
crypted dezimal (32): 85 159 135 147 169 17 58 218 94 196 193 195 194
113 84 193 128 48 98 152 7 240 200 114 148 67 95 11 88 169 42 236
decrypted (16): abcdefghABCDEFGHabcdefghABCDEFGH
--------------------------------------------
SOURCE DELPHI
--------------------------------------------
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| First the code procedure TForm1.Button1Click(Sender: TObject); var indata, outdata : array[0..200] of byte; my_message, key, ivstr, chiff, klar : string; IV : array[0..15] of byte; i : integer; begin memo1.clear;
my_message := 'abcdefghABCDEFGHabcdefghABCDEFGH'; key := 'a7bc27da'; ivstr := '1234567890123456';
for i := 0 to 15 do iv[i] := ord(ivstr[i+1]); for i := 0 to 200 do indata[i] := 0; for i := 0 to 200 do outdata[i] := 0; for i := 0 to length(my_message)-1 do indata[i] := ord(my_message[i+1]);
DCP_rijndael1.init(key,sizeof(key)*8,@iv); DCP_rijndael1.EncryptCBC(indata,outdata,length(my_message));
chiff:=''; klar:=''; for i := 0 to length(my_message)-1 do begin chiff := chiff + chr(outdata[i]); klar := klar + inttostr(outdata[i])+' '; end;
memo1.lines.add('Message ('+inttostr(length(my_message))+'): '+my_message); memo1.lines.add('key ('+inttostr(length(key))+'): '+key); memo1.lines.add('iv ('+inttostr(length(ivstr))+'): '+ivstr); memo1.lines.add('crypted dezimal ('+inttostr(length(chiff))+'): '+klar);
for i:=0 to 200 do indata[i]:=0; DCP_rijndael1.init(key,sizeof(key)*8,@iv); DCP_rijndael1.DEcryptCBC(outdata,indata,length(my_message));
klar:=''; for i:=0 to length(my_message)-1 do klar := klar + chr(indata[i]);
memo1.lines.add('decrypted ('+inttostr(length(klar))+'): '+klar); end; |
--------------------------------------------
SOURCE PHP
--------------------------------------------
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| <?php $message = 'abcdefghABCDEFGHabcdefghABCDEFGH'; $key = 'a7bc27da'; $iv = '1234567890123456';
/* Open the cipher */ $td = mcrypt_module_open ('rijndael-128', '', 'cbc', ''); /* Intialize encryption */ mcrypt_generic_init ($td, $key, $iv); /* Encrypt data */ $encrypted = mcrypt_generic ($td, $message); /* Terminate encryption handler */ mcrypt_generic_deinit ($td);
echo "Message (". strlen($message)."): $message<br>\n"; echo "key (". strlen($key)."): $key<br>\n"; echo "iv (". strlen($iv)."): $iv<br>\n"; echo "crypted dezimal (".strlen($encrypted)."): "; for ($i=0; $i < strlen($encrypted); $i++) { echo ord(substr($encrypted, $i, 1)).' '; } echo "<br>\n"; /* Initialize encryption module for decryption */ mcrypt_generic_init ($td, $key, $iv); /* Decrypt encrypted string */ $decrypted = mdecrypt_generic ($td, $encrypted); /* Terminate decryption handle and close module */ mcrypt_generic_deinit ($td); mcrypt_module_close ($td);
/* Show string */ echo "decrypted (". strlen($iv)."): $decrypted<br>\n"; ?> |