中間有要編碼的片段,編碼方式是AES (CBC模式) 轉 Base64,
我上網找了用下面方法加解密,
$encrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $app_cc_aes_key, $data, MCRYPT_MODE_CBC, $app_cc_aes_iv);
用此方法可以順利解密,但是編碼後對方怎麼樣都解不開,
來回溝通搞了好久,上網爬文好久終於才找到解決方法,
原來是補碼的方式不同PHP是用ZeroPadding,JAVA是用PKCS5Padding,
※ 在PHP官網寫說關於mcrypt的function,PHP7.1之後不能使用!!
class AES {
public $iv;
public $encryptKey;
//加密
public function encrypt($encryptStr) {
$localIV = $this->iv;
$encryptKey = $this->encryptKey;
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, $localIV);
mcrypt_generic_init($module, $encryptKey, $localIV);
$block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$pad = $block - (strlen($encryptStr) % $block);
$encryptStr .= str_repeat(chr($pad), $pad);
$encrypted = mcrypt_generic($module, $encryptStr);
mcrypt_generic_deinit($module);
mcrypt_module_close($module);
return base64_encode($encrypted);
}
//解密
public function decrypt($encryptStr) {
$localIV = $this->iv;
$encryptKey = $this->encryptKey;
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, $localIV);
mcrypt_generic_init($module, $encryptKey, $localIV);
$encryptedData = base64_decode($encryptStr);
$encryptedData = mdecrypt_generic($module, $encryptedData);
return $encryptedData;
}
}
沒有留言:
張貼留言