Delphi: шифрование AES CBC, совместимое с PHP mcrypt_encrypt

1

Я пытаюсь зашифровать данные в Delphi, а затем расшифровать его на PHP, но вывод Delphi отличается от того, что я получаю с PHP, поэтому я сначала проверяю, как вывод PHP и Delphi из шифрования строки одинаковый:

Дельфи-шифрование с использованием DCPcrypt:

Uses DCPcrypt2, DCPblockciphers, DCPrijndael;

var Cipher : TDCP_rijndael;
     Data, Key, IV : Ansistring;
begin
  key := '12345678901234567890123456789012';
  iv  := '1234567890123456';
  Data := 'thisis128bitstxt';

  Cipher := TDCP_rijndael.Create(nil);
  Cipher.Init(Key[1],128,@IV[1]);
  Cipher.EncryptCBC(Data[1],Data[1],Length(Data));
  Cipher.Free;

  With TMemoryStream.Create do begin
    Write(Data[1],Length(Data));
    SaveToFile('z:\delphi');
    Free;
  end;

Теперь код в PHP:

<?php
    $source = "thisis128bitstxt"; //128-bits block
    $key = "12345678901234567890123456789012"; // 32
    $iv = "1234567890123456"; // 16
    $source = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$source,MCRYPT_MODE_CBC,$iv);
    $out = fopen ('php', 'w');
    fwrite ($out, $source);
    fclose ($out);
?>

Результаты:

Изображение 174551

Что не так?

  • 1
    Почему так много людей думают, что текст и двоичный код взаимозаменяемы.
  • 0
    Немного переработал вопрос, сравнив только двоичные данные, чтобы исключить проблемы base64.
Показать ещё 4 комментария
Теги:
encryption
aes

1 ответ

0

Изменить:

$source = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$source,MCRYPT_MODE_CBC,$iv);

чтобы:

$source = mcrypt_cbc(MCRYPT_RIJNDAEL_128,$KEYkey$source,MCRYPT_ENCRYPT,$iv);
  • 0
    mcrypt_cbc устарела, вы должны предоставить решение на основе mcrypt_encrypt

Ещё вопросы

Сообщество Overcoder
Наверх
Меню