zoukankan      html  css  js  c++  java
  • PHP常用函数

        function reformMD5($pwd) {
            $totalStr = "JINRONGGONGCHANGAPPMD520141224INJINYUDASHAJINHONGDONGPRODUCT";
            $pwd = strtoupper($pwd);
            $pwd = str_replace(range(0, 9), array('~', '$', '!', '@', ':', ']', '[', '{', '}', '`'), $pwd);
            $totalStr = substr($totalStr, 0, strlen($totalStr) - strlen($pwd));
            $pwd = $totalStr . $pwd;
            return md5($pwd);
        }
        
        
        /*
         * AES 加密
        *  */
        function encrypt($key, $value) {
            $padSize = 16 - (strlen($value) % 16);
            $value = $value . str_repeat(chr($padSize), $padSize);
            $output = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $value, MCRYPT_MODE_CBC, str_repeat(chr(0), 16));
            return base64_encode($output);
        }
        
        /*
        
        * AES 解密
        *  */
        function decrypt($key, $value) {
            $value = base64_decode($value);
            $output = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $value, MCRYPT_MODE_CBC, str_repeat(chr(0), 16));
        
            $valueLen = strlen($output);
            if ($valueLen % 16 > 0)
                $output = "";
        
            $padSize = ord($output{$valueLen - 1});
            if (($padSize < 1) or ( $padSize > 16))
                $output = "";                // Check padding.
        
            for ($i = 0; $i < $padSize; $i++) {
                if (ord($output{$valueLen - $i - 1}) != $padSize)
                    $output = "";
            }
            $output = substr($output, 0, $valueLen - $padSize);
        
            return $output;
        }
        
        /*
         * 生成36位随字符串
        */
        
        function makeKey() {
            return uniqid(uniqid(), true);
        }
        
        /*
         生成验证码
        *  */
        function makecode($code, $width = 80, $height = 28, $quality = 3) {
            $fontcfg = array('spacing' => 2);
            $fontfile ='../assets/font/ninab.ttf';
            $fontcolors = array(array(27, 78, 181), array(22, 163, 35), array(214, 36, 7), array(88, 127, 30), array(66, 133, 244), array(241, 147, 0), array(232, 0, 0), array(196, 146, 1));
            $im = imagecreatetruecolor($width * $quality, $height * $quality);
            $imbgcolor = imagecolorallocate($im, 255, 255, 255);
            imagefilledrectangle($im, 0, 0, $width * $quality, $height * $quality, $imbgcolor);
        
            $lettersMissing = 4 - strlen($code);
            $fontSizefactor = 0.9 + ($lettersMissing * 0.09);
            $x = 4 * $quality;
            $y = round(($height * 27 / 32) * $quality);
            $length = strlen($code);
            for ($i = 0; $i < $length; $i++) {
                $color = $fontcolors[mt_rand(0, sizeof($fontcolors) - 1)];
                $imbgcolor = imagecolorallocate($im, $color[0], $color[1], $color[2]);
                $degree = rand(8 * -1, 8);
                $fontsize = 22 * $quality * $fontSizefactor;
                $letter = substr($code, $i, 1);
                $coords = imagettftext($im, $fontsize, $degree, $x, $y, $imbgcolor, $fontfile, $letter);
                $x += ($coords[2] - $x) + ($fontcfg['spacing'] * $quality);
            }
            $x1 = $width * $quality * .15;
            $x2 = $x;
            $y1 = rand($height * $quality * .40, $height * $quality * .65);
            $y2 = rand($height * $quality * .40, $height * $quality * .65);
            $lwidth = 0.5 * $quality;
            for ($i = $lwidth * -1; $i <= $lwidth; $i++) {
                imageline($im, $x1, $y1 + $i, $x2, $y2 + $i, $imbgcolor);
            }
            $imResampled = imagecreatetruecolor($width, $height);
            imagecopyresampled($imResampled, $im, 0, 0, 0, 0, $width, $height, $width * $quality, $height * $quality);
            imagedestroy($im);
            $im = $imResampled;
            header("Content-type: image/jpeg");
            imagejpeg($im, null, 80);
            imagedestroy($im);
        }
        
        function random($length = 6, $type = 0) {
            $hash = '';
            $chararr = array(
                    'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz',
                    '0123456789',
                    '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'
            );
            $chars = $chararr[$type];
            $max = strlen($chars) - 1;
            PHP_VERSION < '4.2.0' && mt_srand((double) microtime() * 1000000);
            for ($i = 0; $i < $length; $i++) {
                $hash .= $chars[mt_rand(0, $max)];
            }
            return $hash;
        }
    function gzdecode ($data) {
            $flags = ord(substr($data, 3, 1));
            $headerlen = 10;
            $extralen = 0;
            $filenamelen = 0;
            if ($flags & 4) {
                $extralen = unpack('v' ,substr($data, 10, 2));
                $extralen = $extralen[1];
                $headerlen += 2 + $extralen;
            }
            if ($flags & 8) // Filename
                $headerlen = strpos($data, chr(0), $headerlen) + 1;
            if ($flags & 16) // Comment
                $headerlen = strpos($data, chr(0), $headerlen) + 1;
            if ($flags & 2) // CRC at end of file
                $headerlen += 2;
            $unpacked = @gzinflate(substr($data, $headerlen));
            if ($unpacked === FALSE)
                $unpacked = $data;
            return $unpacked;
        }
    
        /*
         * 生成36位随字符串
        */
        
        function makeKey() {
            return uniqid(uniqid(), true);
        

    mcrypt_encripty加密解密:

        # --- 加密 ---
    
        # 密钥应该是随机的二进制数据,
        # 开始使用 scrypt, bcrypt 或 PBKDF2 将一个字符串转换成一个密钥
        # 密钥是 16 进制字符串格式
        $key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
        
        # 显示 AES-128, 192, 256 对应的密钥长度:
        #16,24,32 字节。
        $key_size =  strlen($key);
        echo "Key size: " . $key_size . "<br>
    ";
        
        $plaintext = "This string was AES-256 / CBC / ZeroBytePadding encrypted.";
    
        # 为 CBC 模式创建随机的初始向量
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        
    
        # 创建和 AES 兼容的密文(Rijndael 分组大小 = 128)
        # 仅适用于编码后的输入不是以 00h 结尾的
        # (因为默认是使用 0 来补齐数据)
        $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
                                     $plaintext, MCRYPT_MODE_CBC, $iv);
    
        # 将初始向量附加在密文之后,以供解密时使用
        $ciphertext = $iv . $ciphertext;
        
        # 对密文进行 base64 编码
        $ciphertext_base64 = base64_encode($ciphertext);
    
        echo  $ciphertext_base64 . "<br>
    ";
    
        # === 警告 ===
    
        # 密文并未进行完整性和可信度保护,
        # 所以可能遭受 Padding Oracle 攻击。
        
        # --- 解密 ---
        $key_dec = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
        $ciphertext_dec = base64_decode($ciphertext_base64);
        
        # 初始向量大小,可以通过 mcrypt_get_iv_size() 来获得
        $iv_size_dec = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
        $iv_dec = substr($ciphertext_dec, 0, $iv_size_dec);
        
        # 获取除初始向量外的密文
        $ciphertext_dec = substr($ciphertext_dec, $iv_size_dec);
    
        # 可能需要从明文末尾移除 0
        $plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key_dec,
                                        $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
        
        echo  $plaintext_dec . "
    ";
  • 相关阅读:
    省选测试28
    省选测试27
    省选测试26
    省选测试25
    省选测试24
    省选测试23
    省选测试22
    省选测试21
    关于maven 导入依赖的最终处理问题
    Dubbo 2 之抽取公共接口
  • 原文地址:https://www.cnblogs.com/thinksasa/p/4370994.html
Copyright © 2011-2022 走看看