我正在做的是在插入新客户时使用 PHP 加密数据。但是稍后我将需要使用 SQL Server 命令解密整个表。但是我遇到了一个问题,我认为 DecryptByKey 只会接受Varbinary
. 但是,当我使用 PHP 加密时,它不会产生Varbinary
变量。两种加密算法应该相同。
我究竟做错了什么?
我用来加密的PHP:
function fnE($sV, $sS)
{
return trim(
base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$sS, $sV,
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_256,
MCRYPT_MODE_ECB
),
MCRYPT_RAND)
)
)
);
}
这会将“James”转换为“/mucJj8Znec7aygh3ly2DI45bSxyv6vG4dzFz4SVVHk=”,它被插入到名为“customer_details”的表中,列名为“first_name”。
然后在 SQL Server 中,我创建了一个主密钥,其密码与我在 PHP 中使用的密码相同。
然后我做:
Create Symmetric Key AdvSym
With Algorithm =AES_256
Encryption by Certificate AdvCert
GO
但每当我尝试解密时,它只会显示 NULL:
Select first_name,
Convert(Varchar(100), DecryptByKey(first_name)) as DecryptedName from customer_details
go
编辑:应该知道我在仅使用 SQL 时加密和解密是成功的。但是我需要能够使用 PHP 加密然后使用 SQL 解密。