因为开发环境要升级了,由原本的 7 升级到8.3,以前在7 的时候加密方式是这样的
openssl_encrypt($content, 'DES-ECB', $key)
在PHP8.2之后,已经开始不用 DES-ECB 模式,可以使用 phpseclib/phpseclib 平替,我使用的是2.0的版本,目前最新应该是3.0,但是安装了3.0后,各种报错,最后还是安装2.0
composer require phpseclib/phpseclib:~2.0
打开 \vendor\phpseclib\phpseclib\phpseclib\Crypt\DES.php
有段示例代码
* Here's a short example of how to use this library:
* <code>
* <?php
* include 'vendor/autoload.php';
*
* $des = new \phpseclib\Crypt\DES();
*
* $des->setKey('abcdefgh');//设置Key
* //下面的code 可以忽略
* $size = 10 * 1024;
* $plaintext = '';
* for ($i = 0; $i < $size; $i++) {
* $plaintext.= 'a';
* }
*
* echo $des->decrypt($des->encrypt($plaintext));//加密和解密调用的方法
* ?>
* </code>
DES() 有个构造函数的,默认是 des-cbc 的模式,详细可以在文档中查看
phpseclib\Crypt\DES | phpseclib API Documentation
在Laravel 中,整合出来就是这样
use phpseclib\Crypt\DES;
$des = new DES(DES::MODE_ECB);
$des->setKey($key);
$ciphertext = $des->encrypt($string);
return base64_encode($ciphertext);
$decryptedtext = $des->decrypt(base64_decode($string));
return $decryptedtext;
还有一种方法,就是安装nodejs,然后利用 php 调用命令 利用nodejs 进行加密解密,不过这种做法比较危险,还是不建议的