PHP 7 中的三重 DES Mcrypt 替换

Posted

技术标签:

【中文标题】PHP 7 中的三重 DES Mcrypt 替换【英文标题】:Triple DES Mcrypt Replacement in PHP 7 【发布时间】:2021-05-05 08:19:14 【问题描述】:

我有以下用php编写的函数

function encrypt($string) 
        //Key
        $key = "key";

        //Encryption
        $cipher_alg = MCRYPT_TRIPLEDES;

        $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND); 

        $encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
        return base64_encode($encrypted_string);
        return $encrypted_string;
    

桌面应用程序使用相同的方案来解密生成的字符串。较新版本的 PHP 不支持 mcrypt。如何替换此代码以达到相同的结果?

【问题讨论】:

您可以使用openssl。 SO上有很多关于从mcrypt迁移到openssl的帖子,例如this post。请注意,TripleDES 已过时,ECB 通常不安全。另一种选择是例如GCM 模式下的 AES。 @Topaco 谢谢..我检查了你提到的帖子。加密的结果不一样。 在链接代码中,如果你返回_encrypt_openssl()中的密文不是十六进制,而是base64编码,那么密文将与你发布的代码生成的密文相同(假设明文和密钥相同) )。如果您得到不同的结果,请发布一个示例以进行复制。 @Topaco 非常感谢 :) 它解决了这个问题。 【参考方案1】:

基于this site,mcrypt 已从 PHP 7.2(我假设您正在使用)中删除,而是添加到 PECL。假设您在 Ubuntu 或类似系统上,现在安装它的过程是安装以下依赖项:

sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo apt-get -y install php7.2-dev
sudo apt-get -y install libmcrypt-dev

然后通过PECL安装mcrypt:

sudo pecl install mcrypt-1.0.1

TechRepublic 的第一个链接上的视频也包含更多信息。

【讨论】:

我用的是共享主机,不知道能不能做到。

以上是关于PHP 7 中的三重 DES Mcrypt 替换的主要内容,如果未能解决你的问题,请参考以下文章

PHP:OpenSSL 等价于 mcrypt:MCRYPT_3DES?

PHP版DES算法加密数据

php升级到7.+之后openssl替代mcrypt实现解密

80分求DES加密解密算法实现的PHP源代码

PHP 将 mcrypt 转换为 openssl

php和java中的加密和解密