AES,高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256比特为上限。包括AES-ECB,AES-CBC,AES-CTR,AES-OFB,AES-CFB
一、明文key及偏移量iv说明
key可为允许16,24,32字节长度,分别对应aes-128,aes-192,aes-256。iv只能为16字节长度。
二、分组密码有五种工作体制
1.(ECB)电码本模式-Electronic Codebook Book
2.(CBC)密码分组链接模式-Cipher Block Chaining
3.(CTR)计算器模式-Counter
4.(CFB)密码反馈模式-Cipher FeedBack
5.(OFB)输出反馈模式-Output FeedBack
三、填充模式
pkcs5padding
pkcs7padding
zeropadding
iso10126
ansix923
no padding
四、参考代码:(下述代码仅支持pkcs7padding)
- <?php
- // php-openssl版aes-cbc-pkcs7加密解密base64输出
- class AesOpenssl {
- private $key;
- private $iv;
- public function __construct($key = '', $iv = "") {
- $this->key = $key;
- $this->iv = $iv;
- }
- // 返回值用bin2hex
- public function encrypt($data) {
- $result = openssl_encrypt($data,'aes-128-cbc', $this->key, OPENSSL_RAW_DATA, $this->iv);
- return base64_encode($result);
- }
- // 解析前hex2bin
- public function decrypt($data) {
- $bin_data=base64_decode($data);
- $result = openssl_decrypt($bin_data,'aes-128-cbc', $this->key, OPENSSL_RAW_DATA, $this->iv);
- return $result;
- }
- }
- // 密钥偏移均为16位字符串
- $key = '1111111111111111';
- $iv = '2222222222222222';
- $data = "this is Aes encryption with pkcs7";
- $aes=new AesOpenssl($key,$iv);
- $result=$aes->encrypt($data);
- echo ($result);
- // $result即为加密返回数据字符串
- $result = $aes->decrypt($result);
- echo "\n";
- echo ($result);
本笔记援引自https://www.acgxt.com/470.html,仅供学习。如有侵犯可联系删除。