Почему mcrypt_encrypt возвращает нечитаемую символьную строку

Я пытался зашифровать данные, используя 16-битный ключ, используя режим ecb для шифра rinjndael_128. шифрование прошло успешно, и я также могу успешно расшифровать зашифрованные данные. Но проблема в том, что функция mcrypt_encrypt возвращает искаженную символьную строку. Я хочу увидеть этот результат в шестнадцатеричном формате.

в то время как я использую онлайн-инструмент для тех же данных, получая это шестнадцатеричное значение как результат bd61ce515890e2e3fb5e404bbe886cc2

код

$key = pack('H*', "07070609070306050601070007000700");
$plaintext = "2dfb0998b2f76f35f5b08972b57cfbfc";
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_ECB);
$ciphertext_base64 = base64_encode($ciphertext);
echo  "encrypted - text: ".$ciphertext . "<br>";
echo  "encrypted base 64 encoded - text: ".$ciphertext_base64 . "<br>";

$ciphertext_dec = base64_decode($ciphertext_base64);
$plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,$ciphertext_dec, MCRYPT_MODE_ECB);
echo  "decrypted data - text: ".$plaintext_dec . "<br>";

Результат:

before encryption - text: 2dfb0998b2f76f35f5b08972b57cfbfc
encrypted - text: (MÓx‹ÓåBÖ i½4²5žNUXÃè/Óë£@ö
encrypted base 64 encoded - text: KE3TeIsa0+VC1g1pCL00sjWeTlVYw+iNgS/TEOujQPY=
decrypted data - text: 2dfb0998b2f76f35f5b08972b57cfbfc*

2

Решение

Размер блока RIJNDAEL-128 / ECB составляет … хорошо 128 бит, то есть 16 байтов.
Но ваш ввод в настоящее время составляет 32 байта, и, следовательно, выход также составляет два блока, то есть 32 байта длиной.

Ваш открытый текст выглядит так, как будто он закодирован в шестнадцатеричном формате, как ключ. Так что относитесь к нему как к ключу.
Также base64_encode () не то же самое, что создание «шестнадцатеричной строки» из последовательности байтов. Но вы можете использовать распаковать () для этого.

<?php
$key = pack('H*', '07070609070306050601070007000700');
$plaintext = pack('H*', '2dfb0998b2f76f35f5b08972b57cfbfc');
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_ECB);
list(,$ciphertext_hex) = unpack('H*', $ciphertext);
echo $ciphertext_hex;

печать bd61ce515890e2e3fb5e404bbe886cc2

1

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

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