检索使用encryptbypassphrase保存的行

时间:2011-09-14 02:53:26

标签: sql sql-server

我是加密新手。我需要在表中保存一个字段(DocNumber)。我通过设置:

将其保存为加密的varbinary字段
   docNumber = ENCRYPTBYPASSPHRASE('password', @docnumber)

当我想使用docnumber查询表时,我会执行以下操作:

   WHERE docNumber = DECRYPTBYPASSPHRASE('password', @docNumber)

然而,它无法返回符合条件的记录。然后我观察到,如果我用相同的密码和值重复调用ENCRYPTBYPASSPHRASE(),我最终得到不同的加密值。 我在哪里弄错了?你通常如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

我总是以这种方式使用它,只是稍微不同的方式来组织谓词:

WHERE CONVERT(VARCHAR(64), DECRYPTBYPASSPHRASE('password', docNumber)) = @docNumber;

区别在于您在原始值上运行解密,其中包括保存时的密码,而在您尝试的版本中,您再次解密,这会生成不同的密码。

编辑使用HASHBYTES()添加示例:

USE tempdb;
GO
CREATE TABLE dbo.enctest(x VARBINARY(64));
GO
INSERT dbo.enctest(x) SELECT HASHBYTES('SHA1', 'foo');
INSERT dbo.enctest(x) SELECT HASHBYTES('SHA1', 'bar');
GO
SELECT x FROM dbo.enctest WHERE x = HASHBYTES('SHA1', 'foo');
GO
DROP TABLE dbo.enctest;
GO