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

猜你喜欢

转载自blog.csdn.net/liuqun0319/article/details/86698816