OpenSSL [des-ede3-cbc] Расшифровка php

мне нужно было получить некоторые данные, зашифрованные с помощью 3DES с общими ключами. Я использую php7 и функцию openssl_decrypt, но не могу воссоздать результат из примера присланной мне документации.

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

openssl enc -des-ede3-cbc -base64 -K 17839778773fadde0066e4578710928988398877bb123789 -iv 00000000 -in D:/in.txt

Example:
string_encoded: 123456
data_to_decrypt: Ja79hWTRfBE=

Я попытался расшифровать "Ja79hWTRfBE=" с помощью онлайн-инструмента и успешно получил "123456". (Я использовал этот инструмент: http://tripledes.online-domain-tools.com/ с вводом текста (шестнадцатеричный) "25aefd8564d17c11", функция: 3DES, режим: CBC, ключ (шестнадцатеричный) 17839778773fadde0066e4578710928988398877bb123789, iv: 00000000 )

Ниже моего php-кода:

$key = "17839778773fadde0066e4578710928988398877bb123789";
$decData = openssl_decrypt(base64_decode('Ja79hWTRfBE='), 'DES-EDE3-CBC', $key, 0, "00000000");
var_dump($decData);

var_dump возвращает мне логическое значение (false).

Что я делаю не так?


person seb    schedule 29.01.2019    source источник


Ответы (1)


я могу воспроизвести вашу цель с помощью следующего кода:

<?php

$data = "123456";
$method = "DES-EDE3";
$key = "17839778773fadde0066e4578710928988398877bb123789";
$options = 0;

// transform the key from hex to string
$key = pack("H*", $key);

// encrypt
$enc = openssl_encrypt($data, $method, $key, $options);
// decrypt
$dec = openssl_decrypt($enc, $method, $key, $options);

echo "plain: ".$data." encrypted: ".$enc." decrypted: ".$dec;
  • установить данные без base64
  • использовать метод DES-EDE3
  • преобразовать ваш ключ (из шестнадцатеричного в строку)
person spinsch    schedule 29.01.2019
comment
Отлично. Большое спасибо @spinsch. Вы спасли мой день. Можете ли вы объяснить, почему вы удалили CBC из метода? Могу ли я предположить, что две функции уже используют функции base64_encode/decode, когда я передаю данные? - person seb; 29.01.2019
comment
Для тех, кто будет читать, моей основной ошибкой было передать ключ, не преобразовав его из шестнадцатеричного в строковый. В сети небольшая путаница. Я много раз читал, что openssl_encrypt/decrypt принимает ключ в шестнадцатеричном формате, но благодаря spinsch вынужден предположить, что это неправда. - person seb; 29.01.2019