2012-03-21 10 views
5

Estoy intentando encriptar y desencriptar una columna en la tabla. Mi código es así:Extraño resultado de 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; 

Por qué mi 'descifrado Cadena' es la siguiente: ㈱ 㐳 㘵 㠷 9

Gracias

Respuesta

7

está cifrando un varchar pero luego convertir a nvarchar de la representación binaria de varchar al descifrar.

decir efectivamente que está haciendo SELECT CAST(CAST('123456789' AS VARBINARY(30)) AS NVARCHAR(30))

Si se altera el bit de descifrado a CONVERT(varchar funciona como se esperaba. A continuación, puede transmitir de varchar a nvarchar si es necesario.

+0

Eso funciona. Gracias, no sé cómo marcar la pregunta como respondida ??? – user1212016

+0

@ user1212016 - Puede marcar la marca de verificación a la izquierda de la respuesta, ¡Gracias! –

+1

Tuve el mismo problema después de seguir la documentación de Microsoft en: https://msdn.microsoft.com/en-us/library/ms188910.aspx Gracias por la corrección y la explicación. – Nick