加密过程
- 利用random_bytes生成随机密钥KEY
- 利用random_bytes函数生成随机IV
- 将加密数据A转成成字符串B
- 将字符串B,KEY,IV根据AES-128-CBC加密得到密文C
- 将IV与密文C连接得到D
- 将D进行BASE64ENCODE得到用于传输的密文E
解密过程
- 线下沟通得到密钥KEY
- 将密文E进行BASE64DECODE得到密文D
- 将密文D切割前16位得到IV
- 将密文D切割16位之后的数据得到密文C
- 将密文C,KEY,IV根据AES-128-CBC解密得到字符串数据B
- 将字符串数据B通过线下约束格式转换成需要的格式
PHP代码
<?php
$strKey = random_bytes(16);
$arrData2 = [
'type'=>'PING',
'data'=>[],
'uuid'=>mt_rand(1000000000,9000000000),
];
class Aes
{
public $strDataKey ;
public function __construct($strDatastrKey)
{
$this->strKey = $strDatastrKey;
}
public function decode($strData)
{
$strData = base64_decode($strData);
$strDataIv = substr($strData,0,16);
$strData = substr($strData, 16);
return openssl_decrypt($strData,"AES-128-CBC",$this->strKey,OPENSSL_RAW_DATA, $strDataIv);
}
public function encode($strData)
{
$strDataIv = random_bytes(16);
return base64_encode($strDataIv.openssl_encrypt($strData,"AES-128-CBC",$this->strKey,OPENSSL_RAW_DATA, $strDataIv));
}
}
$strData = json_encode($arrData);
$Aes = new Aes($strKey);
$strSignData = $Aes->encode($strData);
echo '加密后数据:'.$strSignData;
echo PHP_EOL;
echo PHP_EOL;
$strData = $Aes->decode($strSignData);
echo '解密后数据:'.$strData;
echo PHP_EOL;
echo PHP_EOL;
$arrData = json_decode($strData,true);
print_r($arrData);