柳暗花明笔记

    经典php AES 256 cbc 对称加密

    所属分类:[ php&web ] 猫哲学家 发表于:2014-09-12 12:45 浏览:469

    /**

    * AES256对称加密
    *
    * Author: 260177392@qq.com
    * Create: 2014-09-12
    */
    class aes256 {

    private $_iv;
    private $_key;

    public function __construct() {
    $this->_iv = 'XXX';加密的初始向量(IV的长度必须和Blocksize一样, 且加密和解密一定要用相同的IV)
    $this->_key = 'XXX';
    }

    /**
    * @param string $string
    * @param int $blocksize Blocksize
    * @return String
    */
    public function add_pkcs7_padding($string, $blocksize = 32) {
    $len = strlen($string); 
    $pad = $blocksize - ($len % $blocksize); 
    $string .= str_repeat(chr($pad), $pad);
    return $string;
    }
    /**
    * 加密然后base64转码
    * @param String 明文
    */
    public function encode($str) {
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->_key, $this->add_pkcs7_padding($str) , MCRYPT_MODE_CBC, $this->_iv));
    }
    /**
    * @param String 
    * @return String
    */
    public function strip_pkcs7_padding($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;
    }
    }

    /**
    * 解密
    *
    * @param String $encryptedText 二进制的密文
    * @return String
    */
    public function decode($encryptedText) {
    $encryptedText = base64_decode($encryptedText);
    return $this->strip_pkcs7_padding(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->_key, $encryptedText, MCRYPT_MODE_CBC, $this->_iv));
    }

    }

    标签: php 
    上一编文章 node学习好文章推荐 下一编文章 centos 安装node nodejs
    最近文章
    发表评论