Как расшифровать пароль от SQL-сервера?

У меня есть такой запрос в sql server 2000:

select pwdencrypt('AAAA')

который выводит зашифрованную строку 'AAAA':

0x0100CF465B7B12625EF019E157120D58DD46569AC7BF4118455D12625EF019E157120D58DD46569AC7BF4118455D

**Как я могу преобразовать (расшифровать) вывод из его происхождения (которое 'AAAA')?

Решение

Я полагаю, что pwdencrypt использует хэш, поэтому вы не сможете изменить хэшированную строку - алгоритм разработан таким образом, что это невозможно.

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

Вот как можно проверить введенный пользователем пароль в таблице

SELECT password_field FROM mytable WHERE password_field=pwdencrypt(userEnteredValue)

Замените userEnteredValue на (большой сюрприз) значение, которое ввел пользователь :)

Комментарии (5)

Вы осознаете, что, возможно, вы делаете стержень для своей собственной спины на будущее. Функции pwdencrypt() и pwdcompare() являются недокументированными функциями и могут вести себя по-разному в будущих версиях SQL Server.

Почему бы не хэшировать пароль с помощью предсказуемого алгоритма, такого как SHA-2 или лучше, перед тем как попасть в БД?

Комментарии (1)

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

USE TEMPDB
GO
declare @hash varbinary (255)
CREATE TABLE tempdb..h (id_num int, hash varbinary (255))
SET @hash = pwdencrypt('123') -- encryption
INSERT INTO tempdb..h (id_num,hash) VALUES (1,@hash)
SET @hash = pwdencrypt('123')
INSERT INTO tempdb..h (id_num,hash) VALUES (2,@hash)
SELECT TOP 1 @hash = hash FROM tempdb..h WHERE id_num = 2
SELECT pwdcompare ('123', @hash) AS [Success of check] -- Comparison
SELECT * FROM tempdb..h
INSERT INTO tempdb..h (id_num,hash) 
VALUES (3,CONVERT(varbinary (255),
0x01002D60BA07FE612C8DE537DF3BFCFA49CD9968324481C1A8A8FE612C8DE537DF3BFCFA49CD9968324481C1A8A8))
SELECT TOP 1 @hash = hash FROM tempdb..h WHERE id_num = 3
SELECT pwdcompare ('123', @hash) AS [Success of check] -- Comparison
SELECT * FROM tempdb..h
DROP TABLE tempdb..h
GO
Комментарии (0)