隔着屏幕轻易产生感情的你,肯定很孤独吧。

之前公司做的支付,用的mcrypt的加密,但是当服务器php版本升级到7.2之后就报错了,检查发现是mcrypt库在7.1就已经不被推荐使用,7.2就已经正式被废弃,官方推荐使用openssl,当然你想用还是可以下载一个库然后使用的。
旧版加密:

$size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
$str = $this->pkcs5Pad($str, $size);
//$aaa = mcrypt_cbc(MCRYPT_DES, $key, $str, MCRYPT_ENCRYPT, $key);
$aaa = mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_CBC,$key);

这里设置的是des加密,cbc模式,改为openssl的代码为:

openssl_encrypt($param_string,'DES-CBC',$key,OPENSSL_RAW_DATA,$key);

第一个参数是需要加密的内容,第二个参数是密码方法,比如这里的DES-CBS,如果想用别的密码方法,使用函数

openssl_get_cipher_methods();

或者复制以下代码打印输出一下就能看到所有的加密方法

$ciphers             = openssl_get_cipher_methods();
$ciphers_and_aliases = openssl_get_cipher_methods(true);
$cipher_aliases      = array_diff($ciphers_and_aliases, $ciphers);
print_r($ciphers);
//ECB mode should be avoided
$ciphers = array_filter( $ciphers, function($n) { return stripos($n,"ecb")===FALSE; } );
//At least as early as Aug 2016, Openssl declared the following weak: RC2, RC4, DES, 3DES, MD5 based
$ciphers = array_filter( $ciphers, function($c) { return stripos($c,"des")===FALSE; } );
$ciphers = array_filter( $ciphers, function($c) { return stripos($c,"rc2")===FALSE; } );
$ciphers = array_filter( $ciphers, function($c) { return stripos($c,"rc4")===FALSE; } );
$ciphers = array_filter( $ciphers, function($c) { return stripos($c,"md5")===FALSE; } );
$cipher_aliases = array_filter($cipher_aliases,function($c) { return stripos($c,"des")===FALSE; } );
$cipher_aliases = array_filter($cipher_aliases,function($c) { return stripos($c,"rc2")===FALSE; } );
print_r($ciphers);
print_r($cipher_aliases);

第三个参数是加密密钥,比之前简单很多。第四个参数有多种,一般可传0,若需自动补全可使用其余参数,比如例子里面用的OPENSSL_RAW_DATA。需要注意的是openssl必须传iv变量,也就是openssl_encrypt方法的第五个参数,不然会报错滴。

初始化向量 $iv

初始化向量$ iv的要求类似于password(加密密匙)的要求。它应该是与密码块大小相同长度的二进制字符串。过多的字节被丢弃,并且太短的$ iv会被填充到零字节的块大小。
初始化向量应该是来自CSPRNG的随机字节的二进制串,不要重复使用IV。

例子中是吧加密秘钥与初始化向量设置为了同一个

旧版解密:

mcrypt_decrypt(MCRYPT_DES, $key, $strBin, MCRYPT_MODE_CBC,$key);

改为openssl为:

openssl_decrypt($strBin,'DES-CBC',$key,OPENSSL_RAW_DATA,$key)

写的较为简单,这里只是介绍一下浅显的应用

分类: PHP

1 条评论

感谢 · 2019年5月30日 23:50

感谢 解决我一个问题

感谢进行回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据