PHP7.1 mcrypt 替代方案
PHP7.1 mcrypt alternative
Mcrypt 函数已从 PHP 7.1.0 开始弃用。
我弃用的字符串编码/解码函数:
$key: secret key
$str: string
$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $str, MCRYPT_MODE_CBC, md5(md5($key))));
$decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($str), MCRYPT_MODE_CBC, md5(md5($key))), "[=11=]");
你能推荐一些替代方案吗?
您应该改用 openssl_encrypt。
如上所述,open_ssl 是 mcrypt 的一个很好的替代品。
open_ssl 的唯一问题是它不能用于大字符串。
我写了一个脚本(静态class),解决了这个问题(大字符串被分割成块,encrypted/decrypted在后台分开)。
参见public 要点:
https://gist.github.com/petermuller71/33616d55174d9725fc00a663d30194ba
MCRYPT_RIJNDAEL_256
我在此处发布了 PHP7.3 的完整答案:
片段:
在 phpseclib 库中这样工作
$rijndael = new \phpseclib\Crypt\Rijndael(\phpseclib\Crypt\Rijndael::MODE_ECB);
$rijndael->setKey(ENCRYPT_KEY);
$rijndael->setKeyLength(256);
$rijndael->disablePadding();
$rijndael->setBlockLength(256);
$decoded = $rijndael->decrypt($term);
echo encrypt_openssl($str, $key);
function encrypt_openssl($msg, $key, $iv = null) {
$iv_size = openssl_cipher_iv_length('AES-256-CBC');
if (!$iv) {
$iv = openssl_random_pseudo_bytes($iv_size);
}
$encryptedMessage = openssl_encrypt($msg, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($iv . $encryptedMessage);
}
mcrypt 可能会在 PHP 7.1 替代 openssl
中删除
Mcrypt 函数已从 PHP 7.1.0 开始弃用。
我弃用的字符串编码/解码函数:
$key: secret key
$str: string
$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $str, MCRYPT_MODE_CBC, md5(md5($key))));
$decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($str), MCRYPT_MODE_CBC, md5(md5($key))), "[=11=]");
你能推荐一些替代方案吗?
您应该改用 openssl_encrypt。
如上所述,open_ssl 是 mcrypt 的一个很好的替代品。 open_ssl 的唯一问题是它不能用于大字符串。
我写了一个脚本(静态class),解决了这个问题(大字符串被分割成块,encrypted/decrypted在后台分开)。
参见public 要点: https://gist.github.com/petermuller71/33616d55174d9725fc00a663d30194ba
MCRYPT_RIJNDAEL_256
我在此处发布了 PHP7.3 的完整答案:
片段:
在 phpseclib 库中这样工作
$rijndael = new \phpseclib\Crypt\Rijndael(\phpseclib\Crypt\Rijndael::MODE_ECB);
$rijndael->setKey(ENCRYPT_KEY);
$rijndael->setKeyLength(256);
$rijndael->disablePadding();
$rijndael->setBlockLength(256);
$decoded = $rijndael->decrypt($term);
echo encrypt_openssl($str, $key);
function encrypt_openssl($msg, $key, $iv = null) {
$iv_size = openssl_cipher_iv_length('AES-256-CBC');
if (!$iv) {
$iv = openssl_random_pseudo_bytes($iv_size);
}
$encryptedMessage = openssl_encrypt($msg, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($iv . $encryptedMessage);
}
mcrypt 可能会在 PHP 7.1 替代 openssl
中删除