function aes_encrypt$data $key $iv = openssl_random_pseudo_bytesopenssl_cipher_iv_lengthaes-256-cbc; $encrypted = openssl_encrypt$data aes-256-cbc $key OPENSSL_RAW_DATA $iv; $result =
要将加密后的字符长度修改为32位,可以修改aes_encrypt函数中的$result变量为以下代码:
$result = bin2hex($iv) . bin2hex($encrypted);
这样,$iv的长度将为16位,$encrypted的长度将为32位。
然后,可以通过修改aes_decrypt函数中的$iv变量和$encrypted变量的提取方式来解密32位的加密字符。可以使用以下代码来修改aes_decrypt函数:
$iv = hex2bin(substr($encryptedData, 0, 32)); $encrypted = hex2bin(substr($encryptedData, 32));
这样,$iv将提取32位长度的字符,$encrypted将提取剩下的字符。
修改后的代码如下:
function aes_encrypt($data, $key) {
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
$result = bin2hex($iv) . bin2hex($encrypted);
return $result;
}
function aes_decrypt($encryptedData, $key) {
$iv = hex2bin(substr($encryptedData, 0, 32));
$encrypted = hex2bin(substr($encryptedData, 32));
$decrypted = openssl_decrypt($encrypted, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
return $decrypted;
}
$data = "22222222222222222222";
$key = "123";
$encrypted = aes_encrypt($data, $key);
echo "Encrypted: " . $encrypted . "\n";
$decrypted = aes_decrypt($encrypted, $key);
echo "Decrypted: " . $decrypted . "\n";
这样修改后的代码将加密后的字符长度为32位,并可以正确解密
原文地址: https://www.cveoy.top/t/topic/iELe 著作权归作者所有。请勿转载和采集!