aes-cbc-pkcs7加密解密

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)

  1. <?php
  2. // php-openssl版aes-cbc-pkcs7加密解密base64输出
  3. class AesOpenssl {
  4.     private $key;
  5.     private $iv;
  6.     public function __construct($key = ''$iv = "") {
  7.         $this->key = $key;
  8.         $this->iv = $iv;
  9.     }
  10.     // 返回值用bin2hex
  11.     public function encrypt($data) {
  12.         $result = openssl_encrypt($data,'aes-128-cbc', $this->key, OPENSSL_RAW_DATA, $this->iv);
  13.         return base64_encode($result);
  14.     }
  15.     // 解析前hex2bin
  16.     public function decrypt($data) {
  17.         $bin_data=base64_decode($data);
  18.         $result = openssl_decrypt($bin_data,'aes-128-cbc', $this->key, OPENSSL_RAW_DATA, $this->iv);
  19.         return $result;
  20.     }
  21. }
  22. // 密钥偏移均为16位字符串
  23. $key = '1111111111111111';
  24. $iv = '2222222222222222';
  25. $data = "this is Aes encryption with pkcs7";
  26. $aes=new AesOpenssl($key,$iv);
  27. $result=$aes->encrypt($data);
  28. echo ($result);
  29. // $result即为加密返回数据字符串
  30. $result = $aes->decrypt($result);
  31. echo "\n";
  32. echo ($result);

本笔记援引自https://www.acgxt.com/470.html,仅供学习。如有侵犯可联系删除。

 

 

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!