Рейтинг:
1
OriginalGriff
Что заставляет вас думать, что пароль зашифрован?
Этого не должно быть: это небезопасно, почти так же плохо, как хранить его в обычном тексте.
И System.Text.Encoding не имеет ничего общего с шифрованием - это перевод, вот и все.
Пароли должны быть хэшированы, а не зашифрованы - специально для того, чтобы они не могли быть "обращены" обратно к исходному входу.
Видеть здесь: Хранение паролей: как это сделать.[^]
Michelle Anne Rigor
Пароль зашифрован в SQL Server. Мне нужен был способ извлечь данные как есть и расшифровать их в коде C#.
OriginalGriff
Кто его зашифровал?
Dave Kreskowiak
Пароль никогда не должен быть зашифрован, только хэширован.
У вас есть байты из базы данных, но если вы не знаете, какие alogirthm(ы) использовались для шифрования паролей и любых ключей, участвующих в этом процессе, у вас нет никакой надежды на их расшифровку.
Использование шифратора не приведет к их магической расшифровке. Кодировка просто определяет, как байты интерпретируются для генерации строки из них.
OriginalGriff
Я подозреваю, что он хэширован: длина данных, которую он показывает, подозрительно близка к 512 битам, что может означать хэширование SHA512.
Почему я подозреваю здесь злой умысел? :смеяться:
Dave Kreskowiak
У меня такие же подозрения. Такое количество байтов в его примере делает пароль действительно длинным, даже в Юникоде.
Michelle Anne Rigor
Именно здесь менеджер БД научился шифровать пароль: Как зашифровать Он сообщил мне, что использовал: Детерминистический
Dave Kreskowiak
Отличный. Только компонент database engine может расшифровать пароль, и это видео показывает вам, как именно это сделать, вы можете увидеть его в своем коде.
Michelle Anne Rigor
Я исследовал, что могу расшифровать пароль, но мне нужно получить хранилище сертификатов Windows из диспетчера БД, а затем установить этот сертификат на свою машину. Спасибо тебе за помощь, Тхо. :)
Dave Kreskowiak
Э-э, нет, не знаешь. Это видео показывает вам точно, что вы должны сделать, чтобы заставить базу данных сообщить вам незашифрованный пароль, и это не включает в себя размещение сертификата на вашем компьютере. Ответ буквально содержится в видео, но он быстро замалчивается. Обратите внимание на строку подключения.
Michelle Anne Rigor
Да, я действительно добавил "параметр шифрования столбца = включен" в строку подключения. Но я продолжаю получать эту ошибку после добавления ее в свой Web.config. Это ошибка: системе".Данных.Sqlclient как.Sqlexception в
HResult=0x80131904
Сообщение=не удалось расшифровать столбец "пароль".
Не удалось расшифровать ключ шифрования столбца с помощью поставщика хранилища ключей: 'MSSQL_CERTIFICATE_STORE'..."
Dave Kreskowiak
Теперь мы подходим к настоящей проблеме. Что говорится в остальной части сообщения об ошибке?
Michelle Anne Rigor
Это полное сообщение об ошибке:
Системы.Данных.Sqlclient как.Sqlexception в
HResult=0x80131904
Сообщение=не удалось расшифровать столбец "пароль".
Не удалось расшифровать ключ шифрования столбца с помощью поставщика хранилища ключей: 'MSSQL_CERTIFICATE_STORE'. Последние 10 байт ключа шифрования зашифрованного столбца: '13-83-2C-7F-9B-A6-B9-5F-77-FD'.
Сертификат с отпечатком большого пальца 'AD8B4BD5A471925308407A912D31E0FADFB8202E' не найден в хранилище сертификатов 'My' в папке сертификата 'CurrentUser'. Убедитесь, что путь сертификата в определении главного ключа столбца в базе данных правильный и сертификат был правильно импортирован в расположение/хранилище сертификатов.
Имя параметра: masterKeyPath
Source=.Net Поставщик Данных SqlClient
Трассировка стека:
<не удается оценить="" исключение="" стек="" трассировка=" " >
Внутреннее Исключение 1:
ArgumentException: сертификат с отпечатком большого пальца 'AD8B4BD5A471925308407A912D31E0FADFB8202E' не найден в хранилище сертификатов 'My' в местоположении сертификата 'CurrentUser'. Убедитесь, что путь сертификата в определении главного ключа столбца в базе данных правильный и сертификат был правильно импортирован в расположение/хранилище сертификатов.
Имя параметра: masterKeyPath
Dave Kreskowiak
Итак, из того, что я вижу в сети, вам нужен сертификат, установленный на SQL Server, и вам нужно экспортировать как открытый, так и закрытый ключи на сервере, которые были сгенерированы при включении шифрования для этого столбца.
Затем вы должны установить сертификат и ключи на машину, которая будет запрашивать пароль.