我有一个PHP程序,它使用openssl_encrypt将加密数据存储在数据库中。
我需要能够在mysql中解密这些数据,以便对其执行查询。
问题是我不确定在mysql的AES_DECRYPT函数中我的密钥的值应该是什么。
我的php代码使用base64密钥解密为非ascii值。
代码base64对加密的值进行编码,并在末尾添加IV,因此在mysql中,我对此进行解码和拆分。所有这些都工作正常,但当我去解密时,它返回null。大概是因为我不知道如何正确地放入密钥。
我试过UNHEX("key")
FROM_BASE64("key")
等等
function encrypt($data)
{
if (!$data) {
return null;
}
$key = "lvvs9pxoekc54zsBpsp+/H1235BdjsAscdRRAxr47uw="; //this is not my real key
$encryption_key = base64_decode($key);
$hex = bin2hex($encryption_key);
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv);
return base64_encode($encrypted . '::' . $iv);
}
在mysql中我是这样做的
AES_DECRYPT(
FROM_BASE64(SUBSTRING_INDEX(
UPPER(
CAST(
FROM_BASE64(member_ssn)
AS CHAR(1000)
)
), '::', 1))
, '*KEY* what do i need to put here?') as decrpyted_string
1条答案
按热度按时间gkl3eglg1#
我得到了这个工作,所以我会张贴我的解决方案,为那些谁关心。
该代码执行以下操作。