柳暗花明笔记

    又收录一个经典的php和node都通过加密解决的加密解决方案aes-128-cbc

    所属分类:[ java&python&node ] 猫哲学家 发表于:2014-09-17 14:15 浏览:582

    即是传说中的aes cbc 对称加密

    node端:

    var crypto = require('crypto');

    var key = 'XXX';
    var iv = 'XXX';

    var text = 'XXX'

    var encipher = crypto.createCipheriv('aes-128-cbc', key, iv);

    encoded = encipher.update(text, 'utf8', 'base64');

    encoded += encipher.final('base64');

    console.log(encoded);

     

     

     

    php端:

    /**
    * pkcs7补码
    *
    * @param string $string 明文
    * @param int $blocksize Blocksize , 以 byte 为单位
    *
    * @return String
    */
    function addPkcs7Padding($string, $blocksize = 16) {
    $len = strlen($string); //取得字符串长度
    $pad = $blocksize - ($len % $blocksize); //取得补码的长度
    $string .= str_repeat(chr($pad), $pad); //用ASCII码为补码长度的字符, 补足最后一段
    return $string;
    }
    /**
    * 加密然后base64转码
    *
    * @param String 明文
    * @param 加密的初始向量(IV的长度必须和Blocksize一样, 且加密和解密一定要用相同的IV)
    * @param $key 密钥
    */
    function aes256cbcEncrypt($str, $iv, $key ) {
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, addPkcs7Padding($str, 16) , MCRYPT_MODE_CBC, $iv));
    }
    /**
    * 除去pkcs7 padding
    *
    * @param String 解密后的结果
    *
    * @return String
    */
    function stripPkcs7Padding($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 二进制的密文
    * @param String $iv 加密时候的IV
    * @param String $key 密钥
    *
    * @return String
    */
    function aes256cbcDecrypt($encryptedText, $iv, $key) {
    $encryptedText = base64_decode($encryptedText);
    return stripPkcs7Padding(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encryptedText, MCRYPT_MODE_CBC, $iv));
    }

    $e = aes256cbcEncrypt($data, $iv, $key);
    echo $e , "<br>";

     

    标签: php  node.js 
    上一编文章 国外的ticket做挺好的 下一编文章 linux 下刻录iso系统神器
    最近文章
    发表评论