中間有要編碼的片段,編碼方式是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; } }
沒有留言:
張貼留言