PHP 小知识

白昼怎懂夜的黑 提交于 2020-01-11 07:38:16

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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!