之前我们已经学习过了PHP实现DES加密解密 https://www.wj0511.com/site/detail.html?id=89
但是发现我在实现PHP实现DES加密解密时出现如下错误
Call to undefined function mcrypt_create_iv()
之后发现这是由于我们PHP版本原因,我的php版本是php7.2,如果我把我的php版本切换到php7.0就一切正常了,这是由于函数 mcrypt_get_iv_size 在只在(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0) 这几个版本中有效,所以如果我们的php版本为php7.2的话,我们就需要使用openssl_encrypt函数来实现DES加密解密
1:创建一个DES加密解密组件
<?php
/**
* author: wangjian
* date: 2019/12/11
*/
namespace app\components;
class DesComponents
{
public $desKey;
public function __construct()
{
$this->desKey = '12345678';
}
//DES 加密
public function des($encrypt) {
$passcrypt = openssl_encrypt($encrypt, 'DES-ECB', $this->desKey, OPENSSL_RAW_DATA);
return $passcrypt;
}
/**
* 将二进制数据转换成十六进制
*/
public function asc2hex($temp) {
return bin2hex ( $temp );
}
/**
* 十六进制转换成二进制
*
* @param string
* @return string
*/
public function hex2asc($temp) {
$len = strlen ( $temp );
$data = '';
for($i = 0; $i < $len; $i += 2)
$data .= chr ( hexdec ( substr ( $temp, $i, 2 ) ) );
return $data;
}
//DES解密
public function un_des($decrypt) {
$cipher = openssl_decrypt(($decrypt), 'DES-ECB', $this->desKey, OPENSSL_RAW_DATA);
$cipher = trim($cipher);
return $cipher;
}
}
2:使用des加密解密
$message = '123456';//需要加密的数据
//加密
$des = new DesComponents();
$value = $des->des($message);
$value = $des->asc2hex($value);
var_dump($value);
echo '<br/>';
//解密
$value = $des->hex2asc($value);
$value = $des->un_des($value);
$value = trim($value);
var_dump($value);
上述的方法适合任何版本的php版本
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。