2012-03-21 29 views
5

我想加密和解密表中的一列。我的代码是这样的:奇怪的结果从DecryptByPassphrase

drop table EncryptString 
go 
create table EncryptString(db int, String varchar(100)) 
go 
insert into EncryptString values (2, '123456789') 
go 
ALTER TABLE EncryptString 
ADD StringEncrypted varbinary(256); 
GO 

declare @Pass nvarchar(512) 
set @Pass = 'somepassword' 
update EncryptString set StringEncrypted = ENCRYPTBYPASSPHRASE(@Pass, String, 1,     convert(varbinary(128), db)) 
where db = 2 

select * From EncryptString 

SELECT db, StringEncrypted 
AS 'Encrypted String', CONVERT(nvarchar, 
DecryptByPassphrase('somepassword', StringEncrypted, 1 
, CONVERT(varbinary, db))) 
AS 'Decrypted String' FROM EncryptString 
WHERE db = 2; 

为什么我的 '解密的字符串' 是这样的: ㈱㐳㘵㠷9

感谢

回答

7

您加密varchar但随后从转换为nvarchar解密时的二进制varchar表示。

即有效,你正在做的SELECT CAST(CAST('123456789' AS VARBINARY(30)) AS NVARCHAR(30))

如果你改变了解密位CONVERT(varchar它按预期工作。如果需要,您可以从varchar转换为nvarchar

+0

这很有效。谢谢我不知道如何将问题标记为已回答??? – user1212016 2012-03-21 15:17:57

+0

@ user1212016 - 您可以勾选答案左侧的复选标记,谢谢! – 2012-03-21 15:19:42

+1

在遵循以下Microsoft文档之后,我遇到了同样的问题:https://msdn.microsoft.com/en-us/library/ms188910.aspx感谢您的修复和解释。 – Nick 2015-02-26 09:39:18