当前位置:Gxlcms > PHP教程 > rc4加密后是乱码的有关问题

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

时间:2021-07-01 10:21:17 帮助过:77人阅读

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;
}

人气教程排行