基于phpstudy的小盆友们在搭建环境时候会发现老式mcrypt加密被去掉了,网上很难找到windows安装视频教程。
我在这里给大家教程的同时,也会解释网上的各种骚操作的由来。
首先,下载对应php的mcrypt插件。
地址:
https://windows.php.net/downloads/pecl/releases/mcrypt/
注意后面的php7.X版本号和是否nts(非安全线程)
下载下来会有两个文件和一个licence,将两个文件提取出来备用。
第二,确定自己使用的版本号
将下载的文件解压并放入相应的php的ext文件夹下:
这里以php7.3.4nts
为例,默认地址见截图:
第三,设置环境变量
将相应的php版本目录放置在环境变量》用户变量》Path
中
这一步就是 网上教程当中解压的文件 为什么必须放置在apache目录或system32目录下的主要原因。
就是少了这一步操作
设置成功后检验是否成功:
运行cmd》
输入:
php -v
无视掉报错(因为你phpstudy已经运行php了,所以再运行新的实例会有警告)
看到版本号(7.3.4)那你就配对了。
第四,也是关键的一点,配置php.ini
由于版本更新的问题,现在网上绝大部分配置教程都是错的。
正确的配置方法是添加代码:【注意,两头都没有分号;】
extension=mcrypt
在ini当中,注意别选错php的版本了。
位置搜索;extension=
,添加在其中任意行即可。
重启apache或nginx,因为很多人都会忘,所以单独写
检测是否启用:
编写php:
<?php
phpinfo();
?>
查找mcrypt,发现即可
测试执行CBC加解密
<?php
class MagicCrypt
{
private $iv = "加密秘钥";//密钥偏移量IV,可自定义
private $encryptKey = "AESkeyAESkeyAESkey";//AESkey,可自定义
//加密
public function encrypt($encryptStr)
{
$localIV = $this->iv;
$encryptKey = $this->encryptKey;
//Open module
@$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, $localIV);
//print "module = $module <br/>" ;
@mcrypt_generic_init($module, $encryptKey, $localIV);
//Padding
@$block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$pad = $block - (strlen($encryptStr) % $block); //Compute how many characters need to pad
$encryptStr .= str_repeat(chr($pad), $pad); // After pad, the str length must be equal to block or its integer multiples
//encrypt
@$encrypted = mcrypt_generic($module, $encryptStr);
//Close
@mcrypt_generic_deinit($module);
@mcrypt_module_close($module);
return base64_encode($encrypted);
}
//解密
public function decrypt($encryptStr)
{
$localIV = $this->iv;
$encryptKey = $this->encryptKey;
//Open module
@$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, $localIV);
//print "module = $module <br/>" ;
@mcrypt_generic_init($module, $encryptKey, $localIV);
$encryptedData = base64_decode($encryptStr);
@$encryptedData = mdecrypt_generic($module, $encryptedData);
return $encryptedData;
}
}
$encryptString = '胜利';
$encryptObj = new MagicCrypt();
$result = $encryptObj->encrypt($encryptString);//加密结果
var_dump($encryptObj->decrypt($string));
echo "<br/>";
$decryptString = $decryptString = $encryptObj->decrypt($result);//解密结果
echo $result . "<br/>";
echo $decryptString . "<br/>";
?>
执行如果报错
因为函数已经废弃,所以强行去除报错:【记得加上@】