2015-08-31 2 views
0

Я пытаюсь зашифровать с помощью EncryptByPassPhrase в SQL Server 2012, но когда я выполняю эту функцию, я получаю такие значения, как "öK{8+¨´¡¿" ..., может быть, кто-то может мне помочь ?.EncryptByPassPhrase возвращает специальные символы

Это код, который я использую:

IF(@MODE = 1) 
BEGIN 
    SET @RESUL = convert(varchar(100),ENCRYPTBYPASSPHRASE('Prueba','200000'))<br> 
    PRINT 'ENCRYPT'+ (CAST(@RESUL AS varchar(20))) 
END 
+2

Да, это ожидается. В чем проблема? –

+0

Мне нужно вставить этот пароль, зашифрованный в таблицу .. но когда я хочу его прочитать, ничего мне не даю (я думал, что ecncryptbypassphrase дал мне результат с «enter») ... поэтому я взял результат печати и попытался расшифровать с помощью DECRYPTBYPASSPHRASE, но функция возвращает мне «NULL». – Laura

ответ

0

Давайте разбить его. Согласно документации, выход ENCRYPTBYPASSPHRASE() является varbinary. У вас есть CONVERT ing, что в varchar. В соответствии с документацией для конвертирования, если вы не предоставляете стиль, конвертируйте «Переводит символы ASCII в двоичные байты или двоичные байты в символы ASCII. Каждый символ или байт преобразуется 1: 1.». Если вы ищете что-то большее, например 0x123abc, передайте дополнительный параметр (1) на CONVERT, чтобы сделать это.

Все, что сказано, если вам не нужен человек, чтобы иметь возможность транскрибировать зашифрованный контент (или иначе интерпретировать его), я оставил бы его в своем varbinary представлении. Меньше места для ошибки на стороне расшифровки. В частности:

DECLARE @resul VARBINARY(8000); 
SET @RESUL = ENCRYPTBYPASSPHRASE('Prueba','200000'); 
SELECT CAST(DECRYPTBYPASSPHRASE('Prueba', @resul) AS VARCHAR(50)); 
+0

Спасибо за ваш ответ Бен. Я попытался преобразовать результат в VARBINARY, но не работает. Я не могу использовать DECRYPTBYPASSPHRASE для расшифровки этих специальных символов .. Я думал, что в результате получится что-то вроде 0x11sf ... но не – Laura

+0

Я добавил код выше, чтобы сделать шифрование и дешифрование без необходимости через текстовое представление. Вы должны рассматривать varbinary как непрозрачную. По той же причине вы не открываете файл JPEG и не говорите «Я не вижу изображение». :) –