在 PHP 中,我有一个action.php
页面,我有一个存储在变量中的字符串
$myString = "Foo Bar";
我使用 AES256 使用以下函数加密这个字符串:
function aes256Encrypt($key, $data) {
if(32 !== strlen($key)) $key = hash('SHA256', $key, true);
$padding = 16 - (strlen($data) % 16);
$data .= str_repeat(chr($padding), $padding);
return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, str_repeat("\0", 16));
}
在将数据插入 MySQL 数据库之前,我mysql_real_escape_string()
在将其插入数据库之前使用加密字符串
据我所知,该mysql_real_escape_string()
函数\
在需要转义的字符之前添加!
另一方面,我需要从 MySQL 取回数据并使用此函数对其进行解密:
function aes256Decrypt($key, $data) {
if(32 !== strlen($key)) $key = hash('SHA256', $key, true);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, str_repeat("\0", 16));
$padding = ord($data[strlen($data) - 1]);
return substr($data, 0, -$padding);
}
一切都很好,当我解密从 db 获得的字符串时,我得到了正确的字符串,但我真的很困惑,如果在从 DB 获得字符串后不取消转义字符串,这怎么能正常工作?