<?php

$key = 'GdkTbDNYNdtTHAE10654';
$appKey = 'fvdfzvGlXqCLGqUG';

function rc4_encrypt_bytes($key, $data) {
    $S = range(0, 255);
    $j = 0;
    $out = array();
    for ($i = 0; $i < 256; $i++) {
        $j = ($j + $S[$i] + ord($key[$i % strlen($key)])) % 256;
        $temp = $S[$i];
        $S[$i] = $S[$j];
        $S[$j] = $temp;
    }
    $i = $j = 0;
    foreach (str_split($data) as $char) {
        $i = ($i + 1) % 256;
        $j = ($j + $S[$i]) % 256;
        $temp = $S[$i];
        $S[$i] = $S[$j];
        $S[$j] = $temp;
        $out[] = chr(ord($char) ^ $S[($S[$i] + $S[$j]) % 256]);
    }
    return implode(array_map('chr', $out));
}

function hex_to_bytes($hexStr) {
    $bytes = '';
    for ($i = 0; $i < strlen($hexStr); $i += 2) {
        $bytes .= chr(hexdec(substr($hexStr, $i, 2)));
    }
    return $bytes;
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $data = $_POST['data'];
    $random = $_POST['value'];
    $data = rc4_encrypt_bytes($key, hex_to_bytes($data)); // 解密 POST 请求中的数据
    $nowTime = time();
    $retDict = array('code' => 547, 'msg' => array('kami' => 'testkami', 'vip' => '2025878400'), 'time' => $nowTime);
    $string = $nowTime . $appKey . $random;
    $retDict['check'] = md5($string);
    $retStr = json_encode($retDict);
    $ret = rc4_encrypt_bytes($key, $retStr);
    echo bin2hex($ret);
} else {
    if (isset($_GET['data'])) {
        $data = $_GET['data'];
    } else {
        $data = '';
    }
    $data = rc4_encrypt_bytes($key, hex_to_bytes($data));
    $dataArr = explode('&', $data);
    $_data = array();
    foreach ($dataArr as $item) {
        [$k, $v] = explode('=', $item);
        $_data[$k] = $v;
    }
    $data = $_data;
    $nowTime = time();
    $retDict = array('code' => 547, 'msg' => array('kami' => 'testkami', 'vip' => '2025878400'), 'time' => $nowTime);
    $string = $nowTime . $appKey . $data['value'];
    $retDict['check'] = md5($string);
    $retStr = json_encode($retDict);
    $ret = rc4_encrypt_bytes($key, $retStr);
    echo bin2hex($ret);
}

?>

代码说明:

  1. RC4 加密函数 rc4_encrypt_bytes

    • 使用 RC4 算法对数据进行加密。
    • 接收密钥 key 和数据 data 作为参数。
    • 返回加密后的数据。
  2. 十六进制字符串转字节数组函数 hex_to_bytes

    • 将十六进制字符串转换为字节数组。
  3. 处理 GET 和 POST 请求

    • 对 GET 和 POST 请求分别进行处理。
    • 对 POST 请求中的 data 进行解密。
    • 对 GET 请求中的 data 进行解密,并处理 data 中的参数。
  4. 生成响应数据

    • 生成响应数据,包含 codemsgtimecheck 信息。
    • 使用 RC4 加密响应数据。
    • 输出加密后的响应数据。

代码中进行了以下修改:

  • 使用 isset 函数判断 $_GET['data'] 是否存在,避免 Notice 错误。
  • 使用 hex_to_bytes 函数将十六进制字符串转换为字节数组。
  • 对 POST 请求中的 data 进行解密。

注意事项:

  • RC4 算法已经被证明存在安全漏洞,不建议在关键场景中使用。
  • 本代码仅供学习参考,请勿在生产环境中直接使用。
  • 建议使用更安全的加密算法,例如 AES。

更多信息:

PHP RC4 加密解密示例代码 - 安全数据传输

原文地址: https://www.cveoy.top/t/topic/o4iD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录