PHP - Какое кодирование используется Mcrypt на зашифрованной строке?
Вопрос
Использование PHP Я пытаюсь преобразовать текст шифрования, сгенерированный MCRYPT в двоичный, но когда я пытаюсь преобразовать его обратно на текст шифрования, он не преобразуется правильно, поэтому он не может быть расшифрован. Я предполагаю, что мои кодировки отпущены где-то, но я не знаю, где начать его выяснить. Вот ссылка на сайт http://dev.hersha.me/str2bin.php.php. А вот мой код.
<?php
class phpSteg {
function bin2bstr($input) {
if (!is_string($input)) return null;
return pack('H*', base_convert($input, 2, 16));
}
function bstr2bin($input) {
if (!is_string($input)) return null;
$value = unpack('H*', $input);
return base_convert($value[1], 16, 2);
}
};
$steg = new phpSteg();
//echo $steg->bstr2bin('OMG') . "\n <br \>";
//echo $steg->bin2bstr('010011110100110101000111') . "\n <br \>";
$hash = hash('md5',"OMGZWTF");
echo $hash . "\n <br \>";
$message = "OMG WTF BBQ";
$text = $message;
$key = $hash;
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CFB), MCRYPT_RAND);
echo $iv . "\n <br \>";
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CFB, $iv);
$binenc = $steg->bstr2bin($encrypted);
$bstrenc = $steg->bin2bstr($binenc);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $bstrenc, MCRYPT_MODE_CFB, $iv);
echo "Cipher Text : " . $encrypted . "\n <br \>";
echo "Cipher Text (binary) : " . $binenc . "\n <br \>";
echo "Cipher Text (back from binary) : " . $bstrenc . "\n <br \>";
echo "Decryption : " . $decrypted; // The quick brown fox jumps over the lazy dog
?>
Есть идеи?
Решение 3
Все проблемы решены.
Первый: я перегружал base_convert
функция. Необходимый меньший набор данных.
Во-вторых: довольно просто и очевидно, base_convert
Игнорирует ведущие нули, поэтому при преобразовании пришлось добавить их обратно.
Другие советы
Не беспокойтесь используйте bin2bstr и bstr2bin. Если вам нужно где-нибудь хранить строку (как базу данных), просто Base64 кодируется / декодирует строку после шифрования.
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CFB, $iv);
$binenc = base64_encode($encrypted);
$bstrenc = base64_decode($binenc);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $bstrenc, MCRYPT_MODE_CFB, $iv);
Пытаться base64_encode. в вашей двоичной строке перед шифрованием и использованием base64_decode. После его дешифрования. Mcrypt может быть задыхаться на данных в противном случае, не позволяя вам знать.