【发布时间】:2019-08-17 14:58:01
【问题描述】:
我正在使用以下代码使用 mcrypt 执行加密
<?PHP
define('SECURE_KEY','Somekey');
function encrypt($value){
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
return mcrypt_encrypt(MCRYPT_RIJNDAEL_256, SECURE_KEY, $value, MCRYPT_MODE_ECB, $iv);
}
function decrypt($value){
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, SECURE_KEY, $value, MCRYPT_MODE_ECB, $iv));
}
$temp=encrypt("teststring");
printf($temp);
?>
较新版本的 php 贬低了 mcrypt,我正在寻找一个替代品,它可以使用相同的密钥并产生相同的结果,这样我就不需要更改客户端代码。
【问题讨论】:
-
我建议您更改它。
MCRYPT_RIJNDAEL_256不是 AES 是非常古老且非标准的。我建议您使用经过身份验证的加密模式,如 AES-GCM 或 ChaCha20Poly1305。 -
不推荐使用 mcrypt 的一个重要原因是它提倡不安全的加密方法。如果我查看您的代码,我们有一个实际上是(短)密码的密钥、ECB 模式加密(实际上不使用 IV)和可以去除尾随零字节的零填充(尽管
trim函数会否则这样做)。正如 kelalaka 已经指出的那样,这是您没有使用 AES 的基础。您需要建立一个安全协议并转换为该协议。 -
@kelalaka 好吧.. 会的。
-
@MaartenBodewes 好吧.. 会的。
标签: php encryption mcrypt