Шифрование в SQL Server/Расшифровка в .Net 4

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

В любом случае у нас есть приложение, в котором файлы FTP отправляются из одного места в другое, и, очевидно, для профиля FTP нужен пароль. У нас есть база данных со всеми подробностями профилей, но нам нужны пароли, которые нужно зашифровать. Мы решили дешифровать их в SQL, а затем отправить их в приложение, но это будет означать отправку по сети, чего мы не хотим.

Мы хотим зашифровать сохраненные пароли, передать детали в приложение, а затем расшифровать их в приложении.

Возможно ли это?

Из моего googling, похоже, это не так, но я надеюсь, что у кого-то есть трюк или что-то в этом роде.

Спасибо заранее!

Примечание. Я использую .Net 4 и SQL Server 2008 R2.

Ответ 1

Шифрование и дешифрование с использованием функций Crypto API для столбцов SQL Server (например, EncryptByKey) несовместимо с любым шифрованием или расшифровкой на стороне клиента, поскольку оно использует внутренний, недокументированный формат хранения.

Я бы назвал, что ваш страх перед отправкой паролей по сети не основан, поскольку SQL Server обеспечивает конфиденциальность сетевого подключения, см. Шифрование соединений с SQL Server.

Ваши лучшие варианты состоят в том, чтобы либо сохранить пароль в зашифрованном столбце, и использовать встроенные криптографические функции SQL Server (EncryptByKey, DecryptbyKey) или используйте Прозрачное шифрование базы данных. критерии тоже выбирают тот или иной, в основном, требование лицензирования (TDE требует Enterprise Edition), поскольку TDE превосходит шифрование на уровне столбцов во всех аспектах. Независимо от того, какое решение вы выберете, вы быстро поймете, что главная проблема - это управление ключами, и для этого SQL Server предлагает жизнеспособную историю, см. Иерархия шифрования. Независимо от того, как вы разрабатываете решение, никогда не требуется приложение для шифрования или дешифрования самого пароля, если вам это нужно, тогда у вас явно неправильный путь (поскольку приложение не может управлять самими ключами), поэтому проблема шифрования CLR crypto и SQL Crypto не должна возникать.

Ответ 2

Simpy шифрует и расшифровывает пароли в .net, поскольку SQL работает только для хранения текста.

Ответ 4

Мне кажется, что "очевидный ответ" заключается в том, что вам нужно использовать тот же алгоритм (или соответствующую соответствующую пару шифрования/дешифрования) как на SQL-сервере, так и на dotNet. Поскольку первый использует T-SQL, а второй - управляемый кодовый язык, такой как С#/VB, вам придется писать/генерировать две половины алгоритма на разных языках. ЮК.

Думали ли вы об использовании SQL CLR? Таким образом, вы можете написать обе половины, скажем, С# и запустить этот код из SQL.

У меня была копия этого, которая долгое время сидела на моей полке, но не погружалась слишком глубоко в нее - главным образом потому, что, классно в принципе - я никогда не нашел "необходимости" использовать SQLCLR. Ваша проблема, однако, звучит как сильный кандидат: -)

HTH: -)

Дэмиен