PHP RC4 加密解密示例代码 - 安全数据传输
<?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);
}
?>
代码说明:
-
RC4 加密函数
rc4_encrypt_bytes- 使用 RC4 算法对数据进行加密。
- 接收密钥
key和数据data作为参数。 - 返回加密后的数据。
-
十六进制字符串转字节数组函数
hex_to_bytes- 将十六进制字符串转换为字节数组。
-
处理 GET 和 POST 请求
- 对 GET 和 POST 请求分别进行处理。
- 对 POST 请求中的
data进行解密。 - 对 GET 请求中的
data进行解密,并处理data中的参数。
-
生成响应数据
- 生成响应数据,包含
code、msg、time和check信息。 - 使用 RC4 加密响应数据。
- 输出加密后的响应数据。
- 生成响应数据,包含
代码中进行了以下修改:
- 使用
isset函数判断$_GET['data']是否存在,避免 Notice 错误。 - 使用
hex_to_bytes函数将十六进制字符串转换为字节数组。 - 对 POST 请求中的
data进行解密。
注意事项:
- RC4 算法已经被证明存在安全漏洞,不建议在关键场景中使用。
- 本代码仅供学习参考,请勿在生产环境中直接使用。
- 建议使用更安全的加密算法,例如 AES。
更多信息:
原文地址: https://www.cveoy.top/t/topic/o4iD 著作权归作者所有。请勿转载和采集!