PHP实现RC4加解密

PHP实现RC4加解密

       这篇教程跟大家分享PHP如何进行RC4加解密,RC4加解密代码如下:

/**
 * RC4位置替换
 * @param $a
 * @param $b
 */
function _swap(&$a, &$b)
{
    $tmp = $a;
    $a = $b;
    $b = $tmp;
}

/**
 * RC4 加密
 * @param $key
 * @param $data
 * @param bool $decrypted
 * @return string
 */
function _encrypted($key, $data, $decrypted = false)
{
    $keyLength = strlen($key);
    $S = array();
    for ($i = 0; $i < 256; $i++) $S[$i] = $i;
    $j = 0;
    for ($i = 0; $i < 256; $i++) {
        $j = ($j + $S[$i] + ord($key[$i % $keyLength])) % 256;
        _swap($S[$i], $S[$j]);
    }
    $dataLength = strlen($data);
    $output = "";
    for ($a = $j = $i = 0; $i < $dataLength; $i++) {
        $a = ($a + 1) % 256;
        $j = ($j + $S[$a]) % 256;
        _swap($S[$a], $S[$j]);
        $k = $S[(($S[$a] + $S[$j]) % 256)];
        $output .= chr(ord($data[$i]) ^ $k);
    }
    return ($decrypted) ? $output : bin2hex($output);
}

/**
 *  RC4 解密
 * @param $key
 * @param $data
 * @return string
 */
function _decrypted($key, $data)
{
    if (function_exists("hex2bin")) {
        return _encrypted($key, hex2bin($data), true);

    } else {
        return _encrypted($key, pack("H*", $data), true); // hex2bin php5.4才支持

    }

}

$key = "12343";
$data = "hello";
#加密前
$signData = _encrypted($key, $data);
#加密后
$signLastData = _decrypted($key, $signData);

       这样我们就成功的实现RC4加解密。