用PHP加密并用SQL Server解密

问题描述:

我在做什么是在插入新客户时用PHP加密数据。不过后来我需要使用SQL Server命令解密整个表。然而,我遇到了一个问题,我认为DecryptByKey只会接受Varbinary。但是,当我使用PHP进行加密时,它不会生成Varbinary变量。两种加密算法应该是相同的。用PHP加密并用SQL Server解密

我在做什么错?

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) 
      ) 
     ) 
    ); 
} 

这接通 “詹姆斯” 到 “/ 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进行解密。

+0

嘿,这可能不适合你,但你有没有考虑过使用Web服务器和数据库服务器之间的加密连接?您可以强制对SQL连接进行加密。然后,只需传递名字纯文本,并让数据库同时执行这两个操作。 – cocogorilla 2013-07-25 19:37:55

你在SQL和应用程序中使用相同的凭据。

SQL文档指出,当不允许的数据库用户尝试解密值时,即使使用正确的键名和salt(如果使用),如果数据库用户对所述键的视图定义为false,结果将返回null。

如果您不希望应用程序用户能够拥有对某个键的权限,则使用的解决方法是在用户定义的多个语句表函数中编写select,并在其中更改使用'与执行[允许用户]。'

请记住允许您的应用程序用户“模拟”您的“关键用户”以使其工作。