gpt4 book ai didi

php - 使用 MCRYPT_RIJNDAEL_256 将 mcrypt_encrypt 替换为 openssl_encrypt

转载 作者:可可西里 更新时间:2023-11-01 12:59:46 25 4
gpt4 key购买 nike

你们可能知道,扩展名 mcrypt 将在 php 7.1 中被弃用。

我用来维护我想最终迁移到这个版本的“遗留”应用程序,所以我运行了测试并验证我不能再获得 100% 的覆盖率,因为有一段代码使用了以下内容代码:

$key = 'sA*(DH';

// initialization vector
$iv = md5(md5($key));
$output = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, $iv));

我尝试使用这段代码将这段代码移植到 openssl_encrypt

$key = md5('sA*(DH');
$iv = md5($key);
echo base64_encode(openssl_encrypt($data, "aes-256-cbc", $key, OPENSSL_RAW_DATA, $iv));

但是我有两个问题:

  1. IV 长度应该是 16 个字符(md5 给了我 32 个字符),所以我得到一个 PHP 警告
  2. 输出不一样(即使我截断为 16 个字符)

有人遇到过类似的问题(或知道如何解决吗?)

顺便说一句:我正在使用 PHP 的开发主版本(应该是 7.1.0 alpha 3)。

最佳答案

另一个经过测试的解决方案获取并返回 ANSI 文本以用 openssl_encrypt() 和 openssl_decrypt() 替换 Mcrypt 函数:

//Return encrypted string
public function stringEncrypt ($plainText, $cryptKey = '7R7zX2Urc7qvjhkr') {

$cipher = 'aes-128-cbc';

if (in_array($cipher, openssl_get_cipher_methods()))
{
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt(
$plainText, $cipher, $cryptKey, $options=OPENSSL_RAW_DATA, $iv);
$hmac = hash_hmac('sha256', $ciphertext_raw, $cryptKey, $as_binary=true);
$encodedText = base64_encode( $iv.$hmac.$ciphertext_raw );
}

return $encodedText;
}


//Return decrypted string
public function stringDecrypt ($encodedText, $cryptKey = '7R7zX2Urc7qvjhkr') {

$c = base64_decode($encodedText);
$cipher = 'aes-128-cbc';

if (in_array($cipher, openssl_get_cipher_methods()))
{
$ivlen = openssl_cipher_iv_length($cipher);
$iv = substr($c, 0, $ivlen);
$hmac = substr($c, $ivlen, $sha2len=32);
$ivlenSha2len = $ivlen+$sha2len;
$ciphertext_raw = substr($c, $ivlen+$sha2len);
$plainText = openssl_decrypt(
$ciphertext_raw, $cipher, $cryptKey, $options=OPENSSL_RAW_DATA, $iv);
}

return $plainText;
}

更多阅读 openssl documentation

关于php - 使用 MCRYPT_RIJNDAEL_256 将 mcrypt_encrypt 替换为 openssl_encrypt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38359165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com