Просто хочу декодировать код в простой текст - PullRequest
0 голосов
/ 28 июня 2011

Мы хотели бы узнать больше о функциях 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 ]

4 голосов
/ 28 июня 2011

Мы хотели бы узнать больше о функциях get_rnd_iv () и md5_encrypt ()

Но вы не говорите, что хотите знать!

Есть _encrypt() и _decrypt() - в чем проблема?

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

Смысл IV заключается в том, что шифрование одного и того же сообщения одним и тем же ключом дает различный вывод (и, следовательно, затрудняет атаку повторного воспроизведения и идентификацию ключа). Обратите внимание, что IV должен быть сгенерирован для шифрования и такое же значение передано для дешифрования fn. В случае кода, который вы предоставили, он включается в вывод - но может обрабатываться отдельно.

Я могу ошибаться, но алгоритм здесь выглядит как вариант WEP

2 голосов
/ 28 июня 2011

Возможно, я не до конца понимаю ваш вопрос, но поскольку шифрование и дешифрование - это то, что вы просите здесь с помощью этого кода:

$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"

Это кажетсянастолько очевидно, что я не знаю, действительно ли это то, что вы просите.

...