Просто хочу декодировать код в простой текст
Мы хотели бы узнать больше о функциях get_rnd_iv() и md5_encrypt() этих функций для использования 128-битного кодирования. Теперь мы просто хотим узнать, как декодировать этот код в обычный текст...
Вот мои все строки кода..
function get_rnd_iv($iv_len)
{
$iv = '';
while ($iv_len-- > 0) {
$iv .= chr(mt_rand() & 0xff);
}
return $iv;
}
function md5_encrypt($plain_text, $password, $iv_len = 16)
{
$plain_text .= "\x13";
$n = strlen($plain_text);
if ($n % 16) $plain_text .= str_repeat("\0", 16 - ($n % 16));
$i = 0;
$enc_text = get_rnd_iv($iv_len);
$iv = substr($password ^ $enc_text, 0, 512);
while ($i < $n) {
$block = substr($plain_text, $i, 16) ^ pack('H*', md5($iv));
$enc_text .= $block;
$iv = substr($block . $iv, 0, 512) ^ $password;
$i += 16;
}
return base64_encode($enc_text);
}
function md5_decrypt($enc_text, $password, $iv_len = 16)
{
$enc_text = base64_decode($enc_text);
$n = strlen($enc_text);
$i = $iv_len;
$plain_text = '';
$iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512);
while ($i < $n) {
$block = substr($enc_text, $i, 16);
$plain_text .= $block ^ pack('H*', md5($iv));
$iv = substr($block . $iv, 0, 512) ^ $password;
$i += 16;
}
return preg_replace('/\\x13\\x00*$/', '', $plain_text);
}
?>
2 ответа
Мы хотели бы узнать больше о функциях get_rnd_iv() и md5_encrypt()
Но вы не говорите, что вы хотите знать!
Там есть _encrypt()
и _decrypt()
- в чем проблема?
Я не криптоаналитик - но функции очень плохо названы - md5 - это функция хеширования, а не функция шифрования - то есть смысл md5 - сделать данные расшифрованными - конечно, этот симметричный алгоритм использует функцию md5 - но это не реализует только MD5.
Смысл IV заключается в том, что шифрование одного и того же сообщения одним и тем же ключом дает различный вывод (и, следовательно, затрудняет атаки повторного воспроизведения и идентификацию ключа). Обратите внимание, что IV должен быть сгенерирован для шифрования, и то же значение передается для дешифрования fn. В случае кода, который вы предоставили, он включается в вывод - но может обрабатываться отдельно.
Я могу ошибаться, но алгоритм здесь выглядит как вариант WEP
Возможно, я не до конца понимаю ваш вопрос, но поскольку шифрование и дешифрование - это то, что вы просите здесь с помощью этого кода:
$plain_text = 'Hello World';
$password = 'bb98x! jKl\'5#}';
$enc_text = md5_encrypt($plain_text, $password);
$text = md5_decrypt($enc_text, $password);
var_dump($plain_text, $enc_text, $text);
Выход:
string(11) "Hello World"
string(44) "52tXWp087mLYL/Rd1z8Bbb8sQbE+pp2+tlY95UCmkqc="
string(11) "Hello World"
Это кажется настолько очевидным, что я не знаю, действительно ли это то, что вы просите.