Mukund Thakker Ответов: 3

Как зашифровать/расшифровать строку в sql server


Как зашифровать и расшифровать любую строку с помощью sql?
Я попробовал следующий вариант, но не смог получить одинаковые значения зашифрованных и расшифрованных значений.

DECLARE @HashThis nvarchar(4000);
SELECT @HashThis = CONVERT(nvarchar(4000),'pass123');
SELECT HASHBYTES('SHA1', @HashThis);
GO

select EncryptByPassPhrase('key', 'abc' )

select convert(varchar(100),DecryptByPassPhrase('key', '0x01000000E6A0E10AF0144E38670D9B8E92E6E22787F9CD27B467E253'))

Pablo Aliskevicius

Причина моего голосования 5
Такое может случиться с каждым.

Member 11216458

как преобразовать hashpassword в строковый формат с помощью sql

3 Ответов

Рейтинг:
26

Pablo Aliskevicius

Вы отправляете строку для DecryptByPassPhrase, но функция ожидает параметр varbinary.

declare @encrypt varbinary(200) 
select @encrypt = EncryptByPassPhrase('key', 'abc' )
select @encrypt 
 
select convert(varchar(100),DecryptByPassPhrase('key', @encrypt ))


Результаты таковы:

---------------------------------------------------------------------------
0x010000009912C2B009EEAC5B7F2A9020D433D3EAFA026004ADD5AAB4

(1 row(s) affected)


---------------------------------------------------------------------------
abc

(1 row(s) affected)


Надеюсь, это поможет,
Пабло.


Mukund Thakker

declare @encrypt varbinary(200)
выберите @encrypt = EncryptByPassPhrase('key', 'abc' )
выберите @шифрования

Если вы шифруете с помощью следующего скрипта, он каждый раз выдает разные выходные данные. если я применяю то же самое это дает нулевой результат

Pablo Aliskevicius

Каждый раз ожидается разный выход. Некоторые алгоритмы шифрования вводят случайный шум в зашифрованную строку; это затрудняет их взлом. Вся проблема шифрования, с такими понятиями, как "доказательство" и "Энтропия" (которые имеют в контексте шифрования другие значения, чем их обычные), заполнила десятки книг.

Mukund Thakker

ЭТО НЕ БЫЛО ПРИНЯТО.

Pablo Aliskevicius

А почему бы и нет?

Rakesh N Bhavsar

Я согласен с Мукундом Таккером.
- Когда мы запускаем обе функции в одном запросе, это работает нормально. Но когда мы запускаем его с помощью отдельных sql-скриптов, он не будет работать."

Сценарий выглядит следующим образом:
Я создал две разные хранимые процедуры, каждая из которых предназначена для EncryptByPassPhrase('key', 'abc'), а другая-для convert(varchar(100), DecryptByPassPhrase('key', @encrypt))
Я сохраняю результат процедуры 1 в базе данных.
Процедура 2 будет повторно использовать сохраненное зашифрованное значение varbinary и выполнять дешифровку, возвращая значение 'NULL'.
Честно говоря, я не могу точно использовать функцию sql 'DecryptByPassPhrase ()'.

Рейтинг:
0

7045Jeegnesh

If Help...
For decrypt
-----------------------


DECLARE @pwd varchar(100),@OriginalPwd as varchar(100),@OriginalString as Varchar(100),@Count as int,@iLoop as int,@temp as int,@rightChar as int    

Set @pwd =@Password    
set @Count =LEN (@pwd)    
set @iLoop = 1    
Set @rightChar = 1    
set @OriginalString = ''    
set @OriginalPwd=''    
set @temp = 1    
    
 -- SET NOCOUNT ON added to prevent extra result sets from    
 -- interfering with SELECT statements.    
 --SET NOCOUNT ON;    
 SELECT @OriginalString= REVERSE(@pwd)    
     
 WHILE @temp<=@Count    <pre lang="SQL">
 begin    
  SELECT @OriginalPwd = @OriginalPwd + Char(ascii(RIGHT(LEFT(@OriginalString,@rightChar),1))-@iLoop)         
   if @iLoop=4    
    begin    
     set @iLoop=0    
    end    
  set @iLoop=@iLoop+1       
  set @rightChar=@rightChar+1       
  set @temp=@temp+1    
 END    
 select password=@OriginalPwd  
 PRINT 'Original String Is :- ' +@OriginalPwd    


И я уверен, что вы можете управлять им для шифрования....


Richard Deeming

Это решенный вопрос более чем трехлетней давности. Ваш ответ ничего не добавляет к принятому решению.

Рейтинг:
0

Shanisara

--Шифр
Создать функцию FNC_ENCRIPTION_PW(@str nvarchar(4000))
Возвращает varbinary(8000)
АС
НАЧАТЬ
Объявить @encript varbinary(8000)
SET @encript = ENCRYPTBYPASSPHRASE('KEY',@str)
RETURN (@encript)
КОНЕЦ
ГО


--Расшифровка
Создать функцию FNC_DECRIPTION_PW(@Encrypt varbinary(8000))
Возвращает nvarchar(4000)
АС
НАЧАТЬ
Объявить @decript varbinary(4000)
SET @decript = DECRYPTBYPASSPHRASE('KEY',@Encrypt)
RETURN (@decript)
КОНЕЦ
ГО



--КАК ИСПОЛЬЗОВАТЬ
Объявить @decript nvarchar(4000)
Объявить @encript varbinary(8000)
SET @encript = [dbo].[FNC_ENCRIPTION_PW]('пароль')
Выберите @encript
SET @decript = [dbo].[FNC_DECRIPTION_PW](@encript)
Выберите @decript


Richard Deeming

Это решенный вопрос более чем трехлетней давности. Ваш ответ ничего не добавляет к принятому решению.