Я шифрую некоторые цифры 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)?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;
$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 представление