php mcrypt转openssl

发布时间 2023-11-24 15:56:11作者: 爱喝崂山可乐

由于新版本的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);
//参数同上