由于新版本的php不支持mcrypt,改成支持openssl 所以记一下常用函数的改变
1
mcrypt_get_block_size($this->mcrypt, $this->mode);
改成了
openssl_cipher_iv_length("aes-256-cbc")
//aes-256-cbc是加密算法openssl_cipher_iv_length("aes-256-cbc")
是一个函数调用,用于获取 AES-256-CBC 加密算法的初始化向量长度。在实际使用中,这个函数会返回一个整数值,表示指定加密算法的初始化向量长度。
2
mcrypt_create_iv
改成了
bin2hex(openssl_random_pseudo_bytes(openssl_cipher_iv_length("aes-256-cbc")));
//openssl_random_pseudo_bytes
用于生成指定长度的伪随机字节序列,长度就是上面获取到的初始化向量长度。注意生成的是二进制文本,要用bin2hex 转成16进制 一般用这个生成iv
3
mcrypt_encrypt($this->mcrypt, $this->key, $str, $this->mode, $this->iv);
改成
if (strlen($str) % 16) {
$str = str_pad($str,strlen($str) + 16 - strlen($str) % 16, "\0");
}
openssl_encrypt($str,"aes-256-cbc",$this->key,OPENSSL_NO_PADDING,$this->iv);
//自动填充容易出问题,改成手动填充 第一个值是字符串,第二个值是加密算法,第三个值是密钥,第四个值是加密选项,我这点选项是不自动填充,最后的值是iv
4
mcrypt_decrypt($this->mcrypt, $this->key, $str, $this->mode, $this->iv);
改成
openssl_decrypt($str,"aes-256-cbc", $this->key, OPENSSL_NO_PADDING, $this->iv);
//参数同上
标签:aes,openssl,iv,str,mcrypt,php,256 From: https://www.cnblogs.com/zhengyb-bolg/p/17853955.html