来自DecryptByPassphrase的奇怪结果

use*_*016 8 sql-server-2008

我正在尝试加密并解密表中的一列.我的代码是这样的:

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;
Run Code Online (Sandbox Code Playgroud)

为什么我的'Decrypted String'是这样的:㈱㐳㘵㠷9

谢谢

Mar*_*ith 10

您正在加密a varchar,然后在解密时nvarchar从二进制varchar表示转换为.

即你有效地做了 SELECT CAST(CAST('123456789' AS VARBINARY(30)) AS NVARCHAR(30))

如果您更改解密位,CONVERT(varchar它将按预期工作.如果需要,您可以转换varcharnvarchar.