php7.2版本用openssl_encrypt代替mcrypt_encrypt,导致以往自己写的Aes加密类不能用。
这次项目客户端用的是 AES-128-ECB 加密,我用在线AES工具来测试,发现自己写的加解密方法得到的值不一样。而最终发现是加密的key不是16位长,导致ios客户端与服务器php的加解密不一致。后商讨key为16位长,遂问题解决。下面是 AES-128-ECB 加密类;
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)); }}