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?