PHP AES对称加密算法

作者: 香瓜J | 来源:发表于2017-10-20 09:09 被阅读893次
利用php加密库 mcrypt 进行AES加密解密
//AES加密类
class AESMcrypt {

   public $iv = null; //秘钥向量
   public $key = null; //加密key
   public $bit = 128;
   public $mode= null;//加密模式
   private $cipher;

   public function __construct($bit, $key, $iv, $mode) {

       if(empty($bit) || empty($key) || empty($iv) || empty($mode)){
           return NULL;
       }

       $this->bit = $bit;
       $this->key = $key;
       $this->iv = $iv;
       $this->mode = $mode;

       switch($this->bit) {
           case 192:$this->cipher = MCRYPT_RIJNDAEL_192; break;
           case 256:$this->cipher = MCRYPT_RIJNDAEL_256; break;
           default: $this->cipher = MCRYPT_RIJNDAEL_128;
       } 

       switch($this->mode) {
           case 'ecb':$this->mode = MCRYPT_MODE_ECB; break;
           case 'cfb':$this->mode = MCRYPT_MODE_CFB; break;
           case 'ofb':$this->mode = MCRYPT_MODE_OFB; break;
           case 'nofb':$this->mode = MCRYPT_MODE_NOFB; break;
           case 'cbc':$this->mode = MCRYPT_MODE_CBC; break;
           default: $this->mode = MCRYPT_MODE_CBC;
       }
   }

   public function encrypt($data) {
       $data = base64_encode(mcrypt_encrypt( $this->cipher, $this->key, $data, $this->mode, $this->iv));
       return $data;
   }

   public function decrypt($data) {
       $data = mcrypt_decrypt( $this->cipher, $this->key, base64_decode($data), $this->mode, $this->iv);
       $data = rtrim(rtrim($data), "\x00..\x1F");
       return $data;
   }
}
在ThinkPHP3.2中的使用方法

把加密类放在第三方类库目录中


image.png
在公共函数中调用
/**
 * AES加密
 * @param  [string] $str 要加密的字符串
 * @return [string] $str 加密后的字符串
 */
function encrypt($str){
    Vendor('AES.AESMcrypt');
    $config = C('AES');
    $bit = $config['bit'];
    $key = $config['key'];
    $iv = $config['iv'];
    $mode = $config['mode'];
    $aes = new AESMcrypt($bit, $key, $iv,$mode);
    $str = $aes->encrypt($str);
    return $str;
}
/**
 * AES解密
 * @param  [string] $str 要解密的字符串
 * @return [string] $str 解密后的字符串
 */
function decrypt($str){
    Vendor('AES.AESMcrypt');
    $config = C('AES');//config中的配置
    $bit = $config['bit'];
    $key = $config['key'];
    $iv = $config['iv'];
    $mode = $config['mode'];
    $aes = new AESMcrypt($bit, $key, $iv,$mode);
    $str = $aes->decrypt($str);
    return $str;
}

config配置文件

//注意cbc模式key和iv必须是长度为16的字符串
'AES' => array(
        'bit' => 128,
        'key' => 'woshiwangjiewang',//加解密key
        'iv' => 'wangjieshiwowang',//秘钥向量
        'mode' => 'cbc',//加密模式
        ),
接下来就可以在ThinkPHP中的直接调用encrypt()和decrypt()传入字符串进行加密解密了。
encrypt('我是王杰');
加密后
// WLnz+cbKlkoI40BD8R4e/Q==
decrypt('WLnz+cbKlkoI40BD8R4e/Q==');
解密后
我是王杰
可以用下面的代码来检测系统是否安装了 mcrypt 模块,并查看支持哪些加密算法和模式
$cipher_list = mcrypt_list_algorithms();//mcrypt支持的加密算法列表
$mode_list = mcrypt_list_modes(); //mcrypt支持的加密模式列表
var_dump($cipher_list);
var_dump($mode_list);
我当前的PHP支持一下算法和模式
image.png

相关文章

  • Java 加密算法

    一、消息摘要算法 二、Base64 对称加密算法 三、Des 对称加密算法 四、Aes 对称加密算法 五、Pbe ...

  • Android 拿到私钥字符串对目标字符串进行加密

    关于加密算法 分为对称和非对称加密算法,其中RSA是常用非对称加密算法。对称加密中AES高级加密标准使用Rijnd...

  • # iOS进阶 # 常用加密算法和网络安全问题的了解

    iOS中的加密算法 对称加密算法AES算法 AES加密算法涉及4种操作:字节替代(SubBytes)、行移位(Sh...

  • PHP对称加密-AES

    对称加解密算法中,当前最为安全的是 AES 加密算法(以前应该是是 DES 加密算法),PHP 提供了两个可以用于...

  • PHP AES对称加密算法

    利用php加密库 mcrypt 进行AES加密解密 在ThinkPHP3.2中的使用方法 把加密类放在第三方类库目...

  • Android中AES加密算法

    Android中AES的使用常见的加密算法大致有两种,一种是对称加密算法如AES,另一种是非对称加密算法如RSA。...

  • GoLang AES GSM

    以太坊Whisper协议中,默认的对称加密使用的是AES-GCM加密算法。 AES是一种对称加密算法,它的相关概念...

  • AES加密算法介绍及py实现

    AES简介 高级加密标准AES(Advanced Encrpytion Standard)为最常见的加密算法。对称...

  • 对称加密之-AES加密

    AES简介 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法...

  • 史上最详HTTPS加密解析

    一、概念 加密类型 1、对称加密,如:常见的AES 加密算法 2、非对称加密,如:常见的RSA 加密算法 对称加密...

网友评论

  • AlicFeng:不建议这么操作,大部分方法已经废弃

本文标题:PHP AES对称加密算法

本文链接:https://www.haomeiwen.com/subject/fakpuxtx.html