只想将代码解码为纯文本

时间:2011-06-28 07:27:24

标签: php security decoding 128-bit

我们希望了解更多关于函数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 个答案:

答案 0 :(得分:4)

  

我们想了解更多关于函数get_rnd_iv()和md5_encrypt()

的信息

但是你没有说出你想知道的是什么!

_encrypt()_decrypt() - 问题是什么?

我不是cryptoanalyst - 但功能名称非常糟糕 - md5是一个散列函数而不是加密函数 - 即md5的目的是使数据不可解密 - 当然这种对称算法使用的是md5函数 - 但它没有实现md5。

IV的要点是使用相同的密钥加密相同的消息会产生不同的输出(因此使得重放攻击和密钥识别更加困难)。注意,需要为加密生成IV,并将相同的值传递给解密fn。对于您提供的代码,它将被合并到输出中 - 但可以单独处理。

我可能错了,但这里的算法看起来像是WEP

的变体

答案 1 :(得分:2)

我可能不完全理解您的问题,但就您在此处使用该代码所要求的加密和解密而言:

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

这似乎很明显,如果那真的是你所要求的,我就不知道了。