2012-02-01 3 views
1

Мне нужно получить некоторые конфиденциальные данные с сервера Oracle на SQL Server для использования на моем веб-сайте ASP.NET. Давайте скажем его пароли. Наши парни безопасности говорят, что эти пароли необходимо защищать на каждом шагу. Мой сайт должен иметь возможность сравнивать пользовательский ввод с этими паролями. Эти пароли должны быть переданы с сервера Oracle на SQL Server ночью и могут использоваться только на SQL Server в течение дня.Как реализовать хеширование между Oracle, SQL Server и ASP.NET

Лучшее решение, которое я могу придумать, состоит в том, что нам нужно хэшировать пароли на Oracle и передавать хэши в SQL Server (позволяет предположить, что соединение между ними безопасно, потому что это не моя работа: P). Тогда мое веб-приложение ASP.NET должно быть в состоянии реализовать то же самое хэширование на вводе пользователя, чтобы мы могли сравнить хэш ввода с хэшем базы данных.

Итак, мой вопрос: как я могу что-то сделать с помощью того же алгоритма/ключа/соли на Oracle и .NET? Я знаю, как использовать хеширующие функции .NET, но я не уверен, что я могу использовать в Oracle, что было бы сопоставимо ... Я мог бы передать их в виде простого текста из ASP.NET на SQL Server и записать их там, если это проще, но позвольте назвать это «Plan B».

+0

Почему базы данных должны заботиться об алгоритме хеширования? Базы данных никогда не должны даже получать необработанные данные. Ваша заявка должна позаботиться об этом. – vcsjones

+0

@vcsjones - Хороший вопрос. Пароли попадают в Oracle из другого источника. Мое приложение никогда не увидит источник, поэтому он не может быть первым, чтобы его использовать. – jrizzo

+0

Если md5 работает для вас, см. Мой ответ [здесь] [1]. [1]: http://stackoverflow.com/questions/8810471/get-hash-values-from-sql-server-and-oracle-and-compare-them/8835412#8835412 – tbone

ответ

4

Ваше хранилище данных должно хранить хэшированные значения, на стороне asp.net вам необходимо реализовать функцию md5 для преобразования строк в хеш, а затем сравнить с хешированным значением в вашем db.

http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_obtool.htm#i1003449

Oracle имеет возможность использовать MD5 хэш, который можно передать на сервер SQL и реализации, а также ASP.net.

SQL Server md5

http://www.lazerwire.com/2011/10/ms-sql-md5-hash.html

ASP.net MD5

public string CalculateMD5Hash(string input) 
{ 
    // step 1, calculate MD5 hash from input 
    MD5 md5 = System.Security.Cryptography.MD5.Create(); 
    byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input); 
    byte[] hash = md5.ComputeHash(inputBytes); 

    // step 2, convert byte array to hex string 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < hash.Length; i++) 
    { 
     sb.Append(hash[i].ToString("X2")); 
    } 
    return sb.ToString(); 
} 
+1

Я Отметьте, что MD5 несколько сломан, и, похоже, он становится все более сломанным каждый день. SHA-256 на самом деле является стандартным алгоритмом хеширования, который будет использоваться для этого типа целей в наши дни, но похоже, что Oracle не поддерживает это прямо сейчас. Тем не менее, они поддерживают SHA-1, что намного лучше, чем MD5. – jeffsix

+0

спасибо за эту информацию, глядя на SHA-1, каково ваше чувство на TripleDES? Мы используем это здесь в нескольких приложениях, которые нуждаются в возможности расшифровать. –

+0

TripleDES - это алгоритм шифрования, а не алгоритм хэширования. Когда вы работаете с паролями, лучше всего использовать хэш пароля (так как вы не можете разобрать что-то) вместо зашифрованной формы пароля (так как вы можете расшифровать что-то), если это работает. Здесь, поскольку вам все равно, ЕСЛИ представленный пароль соответствует сохраненному, а не ЧТО, на самом деле пароль, хеши предпочтительнее. – jeffsix

Смежные вопросы