Расшифровка 3des из шестнадцатеричных данных с помощью шестнадцатеричного ключа

Я пытаюсь использовать библиотеку php mycrypt для расшифровки следующего:

Ключ: aaaaaaaabbbbbbbbccccccccdddddddd

Данные: b5057bbc04b842a96144a0f617f2820e

Ожидаемый результат: Test123123

Данные зашифрованы с помощью 3DES в режиме ECB. Код, с которым я сейчас работаю, расшифровывает шестнадцатеричное значение до «e2119b734b5050e3», что переводится как «âsKPPã». Я пытался использовать открытый SSL, который возвращает «Ложь».

Код выглядит следующим образом:

(Версия PHP 5.3.3)

$key = 'aaaaaaaabbbbbbbbccccccccdddddddd';
$key = pack('H*',$key);

// DATA
$data = 'b5057bbc04b842a96144a0f617f2820e';
$data = pack('H'.strlen($key),$data);

// DECRYPT MCRYPT
$data = rtrim(mcrypt_decrypt(MCRYPT_3DES, $key, $data, MCRYPT_MODE_ECB), "\0");
$decryptedHex = unpack('H*',$data);

// DECRYPT OPEN SSL (RETURNS FALSE)
$result = openssl_decrypt($data,'des-ede3', $key);

// ECHO
echo $decryptedHex[1];

-1

Решение

Проблема здесь в том, что слишком много недостающей информации — точный вариант 3DES, информация о заполнении. Немного поигравшись с параметрами шифрования, вместо расшифровки можно попытаться сгенерировать зашифрованный текст, чтобы найти правильные параметры. Они оказываются

openssl_encrypt($ptext,'des-ede', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING)

куда $ptext является "Test123123\0\0\0\0\0\0"

Зашифрованный текст также может быть расшифрован с помощью

$result = openssl_decrypt($data,'des-ede', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);

Вам нужно будет перейти на более новую и поддерживаемую (PHP 5.3 была выпущена в 2009 году и больше не поддерживается с 2015 года) версию PHP.

1

Другие решения

Других решений пока нет …