zoukankan      html  css  js  c++  java
  • php aes

    对称加密是相对于非对称加密存在的。

    对称加密,是通过密钥加密后,可以再通过之前加密的密钥进行解密,得到加密之前的信息。

    非对称加密,是有公钥和私钥,如果使用公钥加密,那么需要用私钥解密,得到加密之前的信息;同样,如果使用私钥加密,那么需要用公钥解密,得到加密之前的信息。

    由于php7已经废弃了mcrypt的内置函数,所以,本篇采用openssl的加密函数。代码如下:

    /**
     * Class OpensslEncrypt 对称加密类
     */
    class OpensslEncrypt
    {
        const IV = "d89fb057f6d4f03g";//加密向量,16个字节
        const KEY = 'e9c8e878ee8e2658';//密钥,16个字节
     
        /**
         * 加密字符串
         * @param string $strContent 待加密的字符串内容
         * @param string $key 加密key
         * @return string 返回加密后的字符串,失败返回false
         */
        public static function encrypt($strContent,$key = self::KEY,$iv = self::IV){
            $strEncrypted = openssl_encrypt($strContent,"AES-128-CBC", $key,OPENSSL_RAW_DATA, $iv);
            return base64_encode($strEncrypted);
        }
     
        /**
         * 解密字符串
         * @param string $strEncryptCode加密后的字符串
         * @param string $key 加密key
         * @return string 返回解密后的字符串,失败返回false
         */
        public static function decrypt($strEncryptCode,$key = self::KEY,$iv = self::IV){
            $strEncrypted = base64_decode($strEncryptCode);
            return openssl_decrypt($strEncrypted,"AES-128-CBC",$key,OPENSSL_RAW_DATA,$iv);
        }
    }
    
    

    本篇的AES加密的分组加密模式采用的CBC的模式,所以需要个初始的加密向量(如果采用ECB的模式则不需要加密向量)。

    采用base64的编码,是因为openssl_encrypt()得到是原始二进制数据,需要转换一下编码。

    OPENSSL_RAW_DATA,是按位或的标记(本处是0),根据这个标记得到原始的二进制数据。

    如果想对加密模式有进一步了解,可以参考:https://blog.csdn.net/zp17764507932/article/details/73610466
    如果想对AES加密的算法有进一步的了解,可以参考:https://blog.csdn.net/qq_28205153/article/details/55798628

  • 相关阅读:
    剑指offer 面试26题
    剑指offer 面试25题
    剑指offer 面试24题
    剑指offer 面试23题
    剑指offer 面试22题
    剑指offer 面试19题
    剑指offer 面试20题
    剑指offer 面试21题
    剑指offer 面试18题
    剑指offer 面试17题
  • 原文地址:https://www.cnblogs.com/liuqun/p/12655193.html
Copyright © 2011-2022 走看看