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