php Aes 128位算法

 

<?php
class Mcrypt
{
    private static $key = "fsdjfojojodjiovjojgfosdjfiojio";
    private static $iv = "y5v8s/N6PHurb/tqcwt4uw==";
    //private static $key = "!AS39(#al*%";
    //private static $iv = "sjA34kd9)_+";

    /**
     * cookie解密
     * @author zhaozhongyi
     * $encryptedData 二进制的密文;
     */
    public static  function Decrypt($encryptedData) {
        if(empty($encryptedData))
        {
            return $encryptedData;
        }
        $encryptedData = base64_decode($encryptedData);
        
        $keyv = base64_decode(self::$key);
        $ivv = base64_decode(self::$iv);
        $data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $keyv, $encryptedData, MCRYPT_MODE_CBC, $ivv);
        //echo "<br/>data = ";
        //print_r($data);
        $data = self::stripPKSC7Padding($data);
        //echo "<br/>data = ";
        //print_r($data);
        return $data;
    }

    /**
     * cookie加密
     * @author zhaozhongyi
     * $encryptedData 需加密字符;
     */
    public static function Ecrypt($encryptedData) {
        if(empty($encryptedData))
        {
            return $encryptedData;
        }
        //echo "<br/>encryptedData = ";
        //echo $encryptedData;
        $encryptedText = self::paddingPKCS7($encryptedData);
        //echo "<br/>encryptedText = ";
        //echo $encryptedText;
        $keyv = base64_decode(self::$key);
        $ivv = base64_decode(self::$iv);
        return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $keyv, $encryptedText, MCRYPT_MODE_CBC, $ivv));
    }

    /**
     * PKSC7解密算法
     */
    private static function stripPKSC7Padding($string){
        if(empty($string))
        {
            return $string;
        }
        $slast = ord(substr($string, -1));
        $slastc = chr($slast);
        $pcheck = substr($string, -$slast);
        if(preg_match("/$slastc{".$slast."}/", $string)){
            $string = substr($string, 0, strlen($string)-$slast);
            return $string;
        } else {
            return false;
        }
    }

    /**
     * PKSC7加密算法
     */
    private static function paddingPKCS7($data)
    {
        if(empty($data))
        {
            return $data;
        }
        $block_size = mcrypt_get_block_size('rijndael-128', 'cbc');
        $padding_char = $block_size - (strlen($data) % $block_size);
        $data .= str_repeat(chr($padding_char), $padding_char);
        return $data;
    }
}

 

posted @ 2015-05-12 13:34  我来也1010  阅读(642)  评论(0编辑  收藏  举报