2012-03-21 11 views
5

Sto tentando di crittografare e decrittografare una colonna nella tabella. Il mio codice è simile a questo:Strano risultato da 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; 

Perché il mio 'decifrato String' è come questo: ㈱ 㐳 㘵 㠷 9

Grazie

risposta

7

Stai crittografia di un varchar ma poi la conversione in nvarchar dal rappresentazione binaria varchar durante la decodifica.

vale a dire in modo efficace si sta facendo SELECT CAST(CAST('123456789' AS VARBINARY(30)) AS NVARCHAR(30))

Se si modifica il bit decrittazione per CONVERT(varchar funziona come previsto. È quindi possibile trasmettere da varchar a nvarchar se necessario.

+0

Che funziona. Grazie, non so come contrassegnare la domanda come risposta ??? – user1212016

+0

@ user1212016 - È possibile selezionare il segno di spunta a sinistra della risposta, Grazie! –

+1

Ho avuto lo stesso problema dopo aver seguito la documentazione di Microsoft all'indirizzo: https://msdn.microsoft.com/en-us/library/ms188910.aspx Grazie per la correzione e la spiegazione. – Nick

Problemi correlati