当前位置: 代码迷 >> PHP >> rc4加密后是乱码的有关问题
  详细解决方案

rc4加密后是乱码的有关问题

热度:379   发布时间:2016-04-28 18:59:13.0
rc4加密后是乱码的问题
这个是我在网上找的RC4加密例子:

function rc4_zz($data,$pwd="")  // $pwd密钥 $data需加密字符串
{
$key [] = "";
$box [] = "";
$cipher= "";
$pwd_length = strlen ( $pwd );
$data_length = strlen ( $data );
for($i = 0; $i < 256; $i ++) {
$key [$i] = ord ( $pwd [$i % $pwd_length] );
$box [$i] = $i;
}
for($j = $i = 0; $i < 256; $i ++) {
$j = ($j + $box [$i] + $key [$i]) % 256;
$tmp = $box [$i];
$box [$i] = $box [$j];
$box [$j] = $tmp;
}
for($a = $j = $i = 0; $i < $data_length; $i ++) {
$a = ($a + 1) % 256;
$j = ($j + $box [$a]) % 256;
$tmp = $box [$a];
$box [$a] = $box [$j];
$box [$j] = $tmp;
$k = $box [(($box [$a] + $box [$j]) % 256)];
$cipher .= chr ( ord ( $data [$i] ) ^ $k );
}
return $cipher;
}


执行完函数后,的出来的结果是乱码:??????  类似这样的
我直接在运行平台直接输出任意字符都是正常的,就是用了他的加密函数后,就是乱码。存不进数据库(想过通过其他途径强行存的,但是执行完的结果,解密后也不是源数据!)
谁用过,知道为什么的教一下,谢谢,在线等!
(不用推荐我用MD5哦,这次任务要求要能完全还原的公私玥加密!)

------解决方案--------------------
按 RC4 算法说明,你的代码应写作
// $pwd密钥 $data需加密字符串
function rc4_zz($data,$pwd="") {
  $key [] = "";
  $box [] = "";
  $cipher= "";
  $pwd = str_pad($pwd, 256, chr(0)); //加上这句
  $pwd_length = strlen ( $pwd );
  $data_length = strlen ( $data );
  for($i = 0; $i < 256; $i ++) {
    $key [$i] = ord ( $pwd [$i % $pwd_length] );
    $box [$i] = $i;
  }
  for($j = $i = 0; $i < 256; $i ++) {
    $j = ($j + $box [$i] + $key [$i]) % 256;
    $tmp = $box [$i];
    $box [$i] = $box [$j];
    $box [$j] = $tmp;
  }
  for($a = $j = $i = 0; $i < $data_length; $i ++) {
    $a = ($a + 1) % 256;
    $j = ($j + $box [$a]) % 256;
    $tmp = $box [$a];
    $box [$a] = $box [$j];
    $box [$j] = $tmp;
    $k = $box [(($box [$a] + $box [$j]) % 256)];
    $cipher .= chr ( ord ( $data [$i] ) ^ $k );
  }
  return $cipher;
}
  相关解决方案