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));
}
}
来源:oschina
链接:https://my.oschina.net/u/3403514/blog/1809008