Странный результат от DecryptByPassphrase - PullRequest
8 голосов
/ 21 марта 2012

Я пытаюсь зашифровать и расшифровать один столбец в таблице. Мой код такой:

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

Спасибо

1 Ответ

10 голосов
/ 21 марта 2012

Вы шифруете varchar, но затем преобразуете в nvarchar из двоичного представления varchar при расшифровке.

т.е. эффективно вы делаете SELECT CAST(CAST('123456789' AS VARBINARY(30)) AS NVARCHAR(30))

Если вы измените бит дешифрования на CONVERT(varchar, он будет работать как положено. Затем вы можете разыграть от varchar до nvarchar, если требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...