Как преобразовать необработанный вывод openssl_encrypt в двоичную строку?

Я шифрую некоторые цифры openssl_encrypt, пример:

<?php

$input = 123;
$binary = decbin($input);

echo $binary; // outputs: 1111011

$cipher = 'aes-128-ecb';
$key = openssl_random_pseudo_bytes(32);

$encodedRaw = openssl_encrypt($binary, $cipher, $key, true);

echo $encodedRaw; // outputs: D�f�e↓v�ne��|۵�

Теперь, поскольку все является числом, а encodedRaw — это просто некоторый двоичный поток (который преобразуется в некоторые странные символы, похожие на случайные символы), я попытался преобразовать это обратно в двоичный файл (01) формат.

$binary2 = bindec($encodedRaw);

echo $binary2; // outputs: 0

Кажется, что bindec () завершается с ошибкой и возвращает false, который волшебным образом преобразуется PHP в 0, Чтобы подтвердить это, я сделал цикл с 20 случайными $ входами, и они все вернули 0 на последнем этапе.

Как конвертировать openssl_encrypt выводить в двоичную строку (которая состоит из 0 и 1)?

1

Решение

decbin возвращает строку символов «0» и «1».
bindec делает обратное. Ожидается строка из символов «0» и «1».

Это не имеет ничего общего с двоичными данными, возвращаемыми openssl_encrypt,

Если вам нравится печатать $encodedRaw в удобочитаемой форме вы можете использовать распаковывать, например вернуть шестнадцатеричную строку:

var_dump(unpack('h*', $encodedRaw));

Чтобы напечатать строку, похожую на bindec Вывод вы можете сделать что-то вроде этого:

$binStr = "";
foreach(str_split(unpack('h*', $encodedRaw)[1]) as $v) {
$binStr .= decbin(hexdec($v));
}
echo $binStr;
2

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

Приложение к ответу Алекса

  • $hex = unpack('h*', $cipherText)[1] преобразует необработанный двоичный код в гекс
  • $cipherText = pack('h*', $hex) преобразует шестнадцатеричную строку в необработанный двоичный файл

В то время как dexhex а также hexdec сделать десятичную <-> Шестнадцатеричное преобразование, в моем случае они потерпели неудачу, потому что я работал с огромными числами.

Поэтому я рекомендую использовать расширение GMP:

  • $gmp = gmp_init($hex, 16); гекс в GMP, то:
  • $dec = gmp_strval($gmp, 10); Номер GMP к основному 10 числу STRING представление
  • $bin = gmp_strval($gmp, 2); GMP номер в базу 2 номер STRING представление
0

По вопросам рекламы [email protected]