<?php
namespace app\shuju\model;
class DataSecurityTool
{
public function opEncryption($context,$key_main = "this is main key", $key_sub = "this is sub key")
{
$key_main = str_split($key_main);
$key_sub = str_split($key_sub);
$context_bytes = str_split($context);
$context_len = count($context_bytes);
$cur_key_len = count($key_main);
if (empty($context_bytes)) {
return null;
}
$context_encrypted = [];
for ($i = 0; $i < $context_len; $i++) {
$context_encrypted[$i] = ord($context_bytes[$i] ^ $key_main[$i % $cur_key_len]);
}
$cur_key_len = count($key_sub);
for ($i = 0; $i < $context_len; $i++) {
$context_encrypted[$i] = $context_encrypted[$i] ^ ord($key_sub[$i % $cur_key_len]);
}
$data = array_map(function ($v) {
return chr($v);
}, $context_encrypted);
return base64_encode(implode($data));
}
public function opDecryption($context,$key_main = "this is main key", $key_sub = "this is sub key")
{
$key_main = str_split($key_main);
$key_sub = str_split($key_sub);
$context = base64_decode($context);
$context_bytes = str_split($context);
$context_len = count($context_bytes);
$cur_key_len = count($key_sub);
if (empty($context_bytes)) {
return null;
}
$context_encrypted = [];
for ($i = 0; $i < $context_len; $i++) {
$context_encrypted[$i] = ord($context_bytes[$i] ^ $key_sub[$i % $cur_key_len]);
}
$cur_key_len = count($key_main);
for ($i = 0; $i < $context_len; $i++) {
$context_encrypted[$i] = $context_encrypted[$i] ^ ord($key_main[$i % $cur_key_len]);
}
$data = array_map(function ($char) {
return chr($char);
}, $context_encrypted);
return implode("", $data);
}
}
注意如果传输的是 json 字符串的时候编码时json默认会将中文转码为unicode编码
如果是 php 5.4 可以方便的调用 JSON_UNESCAPED_UNICODE 选项告诉 json_encode 不要只能转码
如果是 php 5.4 以下的版本可以利用 urlencode 做一些封装
解决json中文乱码
<?php
function znJsonEncode(array $json_arr)
{
$temp = array_map(function ($row) {
return urlencode($row);
}, $json_arr);
return json_encode($temp);
}
function znJsonDecode($json_str, $arr = false)
{
return json_decode(urldecode($json_str), $arr);
}