PHP 加密解密
<?php//加密
function encrypt($data, $key)
{
$key = md5($key);
$x = 0;
$len = strlen($data);
$l = strlen($key);
$char = '';
for ($i = 0; $i < $len; $i++) {
if ($x == $l) {
$x = 0;
}
$char .= $key{$x};
$x++;
}
$str = '';
for ($i = 0; $i < $len; $i++) {
$str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
}
return base64_encode($str);
}
//解密
function decrypt($data, $key)
{
$key = md5($key);
$x = 0;
$data = base64_decode($data);
$len = strlen($data);
$l = strlen($key);
$char = '';
for ($i = 0; $i < $len; $i++) {
if ($x == $l) {
$x = 0;
}
$char .= substr($key, $x, 1);
$x++;
}
$str = '';
for ($i = 0; $i < $len; $i++) {
if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
$str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
} else {
$str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
}
}
return $str;
}
改良加密解密
/**
* 解密,
* @author NullEcho
* @param string $data 密文
* @param string $key 解密因子
* @return string|false 校验失败返回false
*/
public static function decrypt($data, $key)
{
// 查找校验串开始位置
$sit = (ord($data[0]) % (strlen($data) - 35)) ?: 1;
$vfy = substr($data, $sit, 32);
$data = substr_replace($data, '', $sit, 32);
if (strtolower($vfy) != md5($data)) return false;
//开始解密加密串
$key = md5($key);
$x = 0;
$data = base64_decode($data);
$len = strlen($data);
$l = strlen($key);
$char = '';
for ($i = 0; $i < $len; $i++) {
if ($x == $l) {
$x = 0;
}
$char .= substr($key, $x, 1);
$x++;
}
$str = '';
for ($i = 0; $i < $len; $i++) {
if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
$str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
} else {
$str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
}
}
return $str;
}
/**
* 可逆加密,
* @author NullEcho
* @param string $data 加密数据
* @param string $key 加密因子
*/
public static function encrypt($data, $key)
{
if (empty($data)) return $data;
$key = md5($key);
$x = 0;
$len = strlen($data);
$l = strlen($key);
$char = '';
for ($i = 0; $i < $len; $i++) {
if ($x == $l) {
$x = 0;
}
$char .= $key{
$x};
$x++;
}
$str = '';
for ($i = 0; $i < $len; $i++) {
$str .= chr(ord($data{
$i}) + (ord($char{
$i})) % 256);
}
$crypt = base64_encode($str);
$vfy = md5($crypt);
echo $vfy . "\n";
$ins = '';
for ($n = 0; $n < 32; $n++) {
$ins .= mt_rand(0, 1) ? strtoupper($vfy[$n]) : $vfy[$n];
}
// base64最多会有三个等号填位,插入时避开
$sit = (ord($crypt[0]) % (strlen($crypt) - 3)) ?: 1;
$ret = substr_replace($crypt, $ins, $sit, 0);
return $ret;
}
PHP56 ajax时出现 已经废弃了$HTTP_RAW_POST_DATA 解决方法
修改php.ini
always_populate_raw_post_data = -1
PHP中array_filter/array_unique 相关函数不会修正数组下标,会导致json_encode把数组转换成对象.
解决方案在外层包一个array_merge
来源:https://www.cnblogs.com/nullecho/p/10208809.html