• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP扩展mcrypt实现的AES加密功能示例

    本文实例讲述了PHP扩展mcrypt实现的AES加密功能。分享给大家供大家参考,具体如下:

    AES(Advanced Encryption Standard,高级加密标准)是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。Rijndael是在AES中使用的基本密码算法。

    对于此算法网上流传有很多php代码实现的版本,其实php的扩展mcrypt完全支持此加密算法,不必要自己去写代码实现。先不说自己写费时费力(当然你若是想研究此加密算法,那另说),使用php代码实现的算法效率也不会太高。

    mcrypt扩展在php中默认是没有的,需要自己安装配置,其方法可以在网上搜索,这里不在详述。你可以使用以下代码检查你的php环境是否支持mcrypt

    $cipher_list = mcrypt_list_algorithms();//mcrypt支持的加密算法列表
    $mode_list = mcrypt_list_modes(); //mcrypt支持的加密模式列表
    echo 'xmp>';
    print_r($cipher_list);
    print_r($mode_list);
    
    

    若你的环境支持mcrypt,输出结果应该如下:

    Array
    (
        [0] => cast-128
        [1] => gost
        [2] => rijndael-128
        [3] => twofish
        [4] => arcfour
        [5] => cast-256
        [6] => loki97
        [7] => rijndael-192
        [8] => saferplus
        [9] => wake
        [10] => blowfish-compat
        [11] => des
        [12] => rijndael-256
        [13] => serpent
        [14] => xtea
        [15] => blowfish
        [16] => enigma
        [17] => rc2
        [18] => tripledes
    )
    Array
    (
        [0] => cbc
        [1] => cfb
        [2] => ctr
        [3] => ecb
        [4] => ncfb
        [5] => nofb
        [6] => ofb
        [7] => stream
    )

    例如本机采用wampserver环境,直接开启了mcrypt扩展:

    其中rijndael-128,rijndael-192,rijndael-256就是AES加密,3种分别是使用不同的数据块和密钥长度进行加密。

    以下是使用扩展mcrypt实现AES加密的简单示例

    /**
     * 利用mcrypt做AES加密解密
     * @author ts24tsxw24@gmail.com>
     */
    abstract class AES{
     /**
     * 算法,另外还有192和256两种长度
     */
     const CIPHER = MCRYPT_RIJNDAEL_128;
     /**
     * 模式
     */
     const MODE = MCRYPT_MODE_ECB;
     /**
     * 加密
     * @param string $key 密钥
     * @param string $str 需加密的字符串
     * @return type
     */
     static public function encode( $key, $str ){
     $iv = mcrypt_create_iv(mcrypt_get_iv_size(self::CIPHER,self::MODE),MCRYPT_RAND);
     return mcrypt_encrypt(self::CIPHER, $key, $str, self::MODE, $iv);
     }
     /**
     * 解密
     * @param type $key
     * @param type $str
     * @return type
     */
     static public function decode( $key, $str ){
     $iv = mcrypt_create_iv(mcrypt_get_iv_size(self::CIPHER,self::MODE),MCRYPT_RAND);
     return mcrypt_decrypt(self::CIPHER, $key, $str, self::MODE, $iv);
     }
    }
    
    

    使用示例:

    $str = '我是明文我是明文我是明文我是明文我是明文dsfdghgasdfasdddddddd';
    $key = 'aSGJLGYEWERWRREW4567i8o';
    $str1=AES::encode($key, $str);
    $str2=AES::decode($key, $str1);
    echo 'xmp>';
    var_dump($str);
    var_dump($str1);
    var_dump($str2);
    var_dump(rtrim($str2));
    
    

    输出结果

    问题,不知道是什么原因,解密后的字符串(见上图),末尾还留下有不可见的填充字符,当明文刚好可以分组时则没有。

    PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

    文字在线加密解密工具(包含AES、DES、RC4等):
    http://tools.jb51.net/password/txt_encode

    MD5在线加密工具:
    http://tools.jb51.net/password/CreateMD5Password

    在线散列/哈希算法加密工具:
    http://tools.jb51.net/password/hash_encrypt

    在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
    http://tools.jb51.net/password/hash_md5_sha

    在线sha1/sha224/sha256/sha384/sha512加密工具:
    http://tools.jb51.net/password/sha_encode

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php加密方法总结》、《PHP编码与转码操作技巧汇总》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《php正则表达式用法总结》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP代码加密和扩展解密实战
    • PHP基于mcript扩展实现对称加密功能示例
    • PHP 使用openssl 扩展实现公钥加密的方法
    • PHP的openssl加密扩展使用小结(推荐)
    • PHP加密扩展库Mcrypt安装和实例
    • 详解PHP的Sodium加密扩展函数
    上一篇:Yii2.0建立公共方法简单示例
    下一篇:PHP date()格式MySQL中插入datetime方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    PHP扩展mcrypt实现的AES加密功能示例 PHP,扩展,mcrypt,实现,的,AES,