PHP AES加解密(兼容php5,php7)
2021-02-16 10:16
标签:random 构造 交流 UNC version nbsp 密钥 sub class 最近在工作中负责对接API,对方要求对业务数据进行AES 算法(256,ECB,补码方式:PKCS5Padding)加密。 加密算法要求如下: 算法AES/ECB/PKCS5Padding 密钥长度256 bin2hex(2 进制转 16 进制) PKCS5Padding的示例代码: 获取PHP版本: 加密部分代码: 由于要求加密后并转化为大写 解密部分代码: 最后补充下,PKCS5Padding其实就是字符串填充的算法,关于PKCS5Padding和初始化向量(iv)的详细内容,欢迎大家自行查阅资料学习交流。 PHP AES加解密(兼容php5,php7) 标签:random 构造 交流 UNC version nbsp 密钥 sub class 原文地址:https://www.cnblogs.com/daixin/p/12974350.html 1 private function pkcs5_pad($text, $padlen){
2 $span = $padlen-(strlen($text)%$padlen);
3 return $text . str_repeat(chr($span),$span);
4 }
5
6
7 private function pkcs5_unpad($text)
8 {
9 $pad = ord($text{strlen($text)-1});
10 if ($pad > strlen($text)) return false;
11 if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
12 return substr($text, 0, -1 * $pad);
13 }
1 public $versions =‘‘;
2 #构造函数
3 public function __construct(){
4 $this->versions=substr(PHP_VERSION,0,3)*10;
5 }
1 public function aes_encode($input)
2 {
3 if($this->versions){
4 // php
5 $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
6 $size=mcrypt_get_block_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
7 // PKCS5Padding补码
8 $input=$this->pkcs5_pad($input, $size);
9 $encryptedStr = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$this->open_key, $input , MCRYPT_MODE_ECB,$iv);
10 $data = strtoupper(bin2hex($encryptedStr));
11 }else{
12 // php>7.2
13 $ivlen = openssl_cipher_iv_length("AES-256-ECB");
14 $iv = openssl_random_pseudo_bytes($ivlen);
15 $data = strtoupper(bin2hex(openssl_encrypt($input, "AES-256-ECB", $this->open_key, OPENSSL_RAW_DATA, $iv)));
16 }
17 return $data;
18 }
1 public function aes_decode($aesStr)
2 {
3 $aesStr=hex2bin($aesStr);
4 if($this->versions){
5 $decrypted=mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$this->open_key,$aesStr,MCRYPT_MODE_ECB);
6 $data=$this->pkcs5_unpad($decrypted);
7 }else{
8 $ivlen = openssl_cipher_iv_length("AES-256-ECB");
9 $iv = openssl_random_pseudo_bytes($ivlen);
10 $data=openssl_decrypt($aesStr,‘AES-256-ECB‘,$this->open_key,OPENSSL_RAW_DATA,$iv);
11 }
12 return $data;
13 }