php aesphp 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),根据这个标记得到原始的二进制数据。