php7.2版本用openssl_encrypt代替mcrypt_encrypt,致使以往本身寫的Aes加密類不能用。php
此次項目客戶端用的是 AES-128-ECB 加密,我用在線AES工具來測試,發現本身寫的加解密方法獲得的值不同。而最終發現是加密的key不是16位長,致使ios客戶端與服務器php的加解密不一致。後商討key爲16位長,遂問題解決。下面是 AES-128-ECB 加密類;ios
class Aes { //密鑰 須是16位 public $key ; /** * 解密字符串 * @param string $data 字符串 * @return string */ public function __construct() { $this->key = '1234567890123456'; } public function decode($str) { return openssl_decrypt(base64_decode($str),"AES-128-ECB",$this->key,OPENSSL_RAW_DATA); } /** * 加密字符串 * @param string $data 字符串 * @return string */ public function encode($str) { return base64_encode(openssl_encrypt($str,"AES-128-ECB",$this->key,OPENSSL_RAW_DATA)); } }
若你是採用CBC加密,則還需排序$iv偏移量,以下面是AES-128-CBC加解密類:服務器
class Aes { //密鑰 須是16位 public $key ; //偏移量 public $iv = '1234567890123456'; /** * 解密字符串 * @param string $data 字符串 * @return string */ public function __construct() { $this->key = '1234567890123456'; } public function decode($str) { return openssl_decrypt(base64_decode($str),"AES-128-CBC",$this->key,OPENSSL_RAW_DATA, $this->iv); } /** * 加密字符串 * @param string $data 字符串 * @return string */ public function encode($str) { return base64_encode(openssl_encrypt($str,"AES-128-CBC",$this->key,OPENSSL_RAW_DATA, $this->iv)); } }