2012-03-21 36 views
5

Tôi đang cố mã hóa và giải mã một cột trong bảng. Mã của tôi là như thế này:Kết quả lạ từ 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; 

Tại sao 'giải mã String' của tôi là như thế này: ㈱ 㐳 㘵 㠷 9

Cảm ơn

Trả lời

7

Bạn đang mã hóa một varchar nhưng sau đó chuyển sang nvarchar từ nhị phân varchar biểu diễn khi giải mã.

ví dụ: một cách hiệu quả bạn đang làm SELECT CAST(CAST('123456789' AS VARBINARY(30)) AS NVARCHAR(30))

Nếu bạn thay đổi các bit giải mã để CONVERT(varchar nó hoạt động như mong đợi. Sau đó, bạn có thể truyền từ varchar đến nvarchar nếu được yêu cầu.

+0

Điều đó có hiệu quả. Cảm ơn bạn Tôi không biết cách đánh dấu câu hỏi là đã trả lời ??? – user1212016

+0

@ user1212016 - Bạn có thể đánh dấu vào dấu kiểm ở bên trái câu trả lời, Cảm ơn! –

+1

Tôi đã có cùng một vấn đề sau khi làm theo các tài liệu của Microsoft tại: https://msdn.microsoft.com/en-us/library/ms188910.aspx Cảm ơn bạn đã sửa chữa và giải thích. – Nick

Các vấn đề liên quan