PHP 小知识

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

 

posted @ 2019-01-02 15:27  山城炮灰  阅读(193)  评论(0)    收藏  举报