【发布时间】:2018-12-12 02:22:52
【问题描述】:
我在system library folder 中有OpenCart 1.5.6.4 和encryption.php 文件。encryption.php中的代码是:
<?php
final class Encryption {
private $key;
private $iv;
public function __construct($key) {
$this->key = hash('sha256', $key, true);
$this->iv = mcrypt_create_iv(32, MCRYPT_RAND);
}
public function encrypt($value) {
return strtr(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->key, $value, MCRYPT_MODE_ECB, $this->iv)), '+/=', '-_,');
}
public function decrypt($value) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->key, base64_decode(strtr($value, '-_,', '+/=')), MCRYPT_MODE_ECB, $this->iv));
}
}
?>
对于从 php 5.6 迁移到 php 7.2 ,我需要将 Mcrypt Encription 替换为 OpenSSL Encription。
我已将 mcrypt_create_iv(32, MCRYPT_RAND) 替换为 openssl_random_pseudo_bytes(32, true) ,但对于 encrypt function 和 decrypt function ,我不知道 parameters 用于这些功能。encription.php 代码需要进行哪些更改?
【问题讨论】:
-
@jiri-hrazdil ,如果你仔细阅读你会发现这两个问题有很大的不同。
-
openssl_encrypt($data=$value, $method="AES-256-CBC", $key=$this->key, $options=OPENSSL_RAW_DATA, $iv=$this->iv)。我假设您想使用"AES-256-CBC",因为您的密钥是 256 位,并且您使用的是 IV。如果您坚持使用 ECB(不推荐),只需将“CBC”替换为“ECB”即可。无论哪种方式,您都无法解密您的数据,因为 AES 不支持 256 块大小。 -
@t.m.adam 它完美的工作。
-
太棒了!由于您使用的是 PHP 7.2 并且兼容性显然不是问题,因此请考虑使用 AEAD 密码
标签: php encryption openssl opencart mcrypt