ASP.net Эта реализация не является частью проверенных криптографических алгоритмов платформы Windows FIPS.

Привет всем, я получаю эту ошибку при попытке сравнить пароль в моей базе данных, используя мою страницу ASP.net.

Эта реализация не является частью проверенных криптографических алгоритмов платформы Windows FIPS.

Код выглядит следующим образом:

Public Shared Function UserAuthentication(ByVal user As String, ByVal pass As String) As WebUserSession
  Dim strSQL As String = ""
  Dim strForEncryption As String = pass
  Dim result As Byte()
  Dim sHA1Managed As SHA1 = New SHA1Managed()
  Dim encryptedString As New System.Text.StringBuilder()

  result = sHA1Managed.ComputeHash(ASCIIEncoding.ASCII.GetBytes(pass))

  For Each outputByte As Byte In result
    'convert each byte to a Hexadecimal upper case string
    encryptedString.Append(outputByte.ToString("x2").ToUpper())
  Next

  strSQL &= "SELECT email, name, id, permission_id, username FROM (user) INNER JOIN user_per ON user.id = user_per.user_id "
  strSQL &= "WHERE(username = '" & user & "' And password = '" & encryptedString.ToString() & "')"

Недавно нам пришлось обновить/заблокировать наш сервер, чтобы соответствовать дырам в безопасности и т.п. Но это вызвало эту ошибку для одного из веб-сайтов, которые мы размещаем на том же сервере. До всех этих настроек безопасности веб-сайт работал нормально.

Странная часть заключается в том, что я могу запускать веб-сайт локально (режим отладки) в VS 2010, и он работает нормально. Никаких ошибок.

Может ли кто-нибудь дать какие-либо советы о том, как обойти это, чтобы веб-сайт снова работал, как это было до того, как мы добавили все эти настройки безопасности для подачи жалобы? Мы просто не можем просто отключить его, потому что это приведет к тому, что другие наши веб-сайты перестанут соответствовать требованиям.

Я уже пробовал предложения на этих страницах: http://blogs.msdn.com/b/brijs/archive/2010/08/10/issue-getting-this-implementation-is-not-Часть-платформы-Windows-Fips-проверенные-криптографические-алгоритмы-исключение-при-создании-outlook-vsto-add-in-in-vs-2010.aspx

http://social.msdn.microsoft.com/Forums/en/clr/thread/7a62c936-b3cc-4493-a3cd-cc5fd18b6b2a

http://support.microsoft.com/kb/935434

http://blogs.iis.net/webtopics/archive/2009/07/20/parser-error-message-this-implementation-is-not-part-of-the-windows-platform-fips-проверенные-криптографические-алгоритмы-когда-сетевая-страница-имеет-отладку-true.aspx

http://blog.aggregatedintelligence.com/2007/10/fips-validated-cryptographic-algorithms.html

Спасибо.

Также пытался использовать этот код

Dim p As String = Password.Text.ToString
Dim data(p) As Byte
Dim result() As Byte
Dim sha As New SHA1CryptoServiceProvider()

result = sha.ComputeHash(data)

Ошибка:

Преобразование строки "S51998Dg5" в тип "Целое число" недопустимо.

И эта ошибка находится в строке: Dim data(p) As Byte


person StealthRT    schedule 22.10.2012    source источник
comment
debug=false в web.config?   -  person Louis Ricci    schedule 22.10.2012
comment
Не должно быть возможности расшифровать пароль. Пароли должны быть хешированы, а не зашифрованы.   -  person SLaks    schedule 22.10.2012
comment
Исправление @SLaks: декодирование = сравнение.   -  person StealthRT    schedule 23.10.2012
comment
@LastCoder: Установка для моего файла web.config значения ‹compilation debug=false strict=false absolute=true targetFramework=4.0 /› не сработала.   -  person StealthRT    schedule 23.10.2012
comment
У вас есть уязвимость SQL-инъекции.   -  person SLaks    schedule 23.10.2012
comment
Не используйте SHA1. Не используйте несоленые хэши. Вместо этого используйте PBKDFv2.   -  person SLaks    schedule 23.10.2012
comment
@SLaks: я не вижу PBKDFv2 для ASP.net?   -  person StealthRT    schedule 23.10.2012
comment
msdn.microsoft.com/en-us/library/   -  person SLaks    schedule 23.10.2012


Ответы (1)


Согласно этому sha1managed не соответствует требованиям fips. Он генерирует исключение InvalidOperationException, поскольку этот класс не соответствует алгоритму FIPS.

Вам необходимо либо отключить соответствие FIPS, либо использовать реализацию, совместимую с FIPS. sha1cryptoserviceprovider Я думаю, это жалоба FIPS.

person imichaelmiers    schedule 23.10.2012
comment
Кажется, это не работает (или я не могу заставить его работать в коде). У нас уже есть пароли, хэшированные в SHA1, поэтому они не совпадают при сравнении пользователей, вводимых в пароле, с хэшем в БД. Ошибка, которую я продолжаю получать: Преобразование строки S51998Dg5 в тип «Целое число» недопустимо. - person StealthRT; 23.10.2012
comment
Так что теперь я не VB, а только C#, но похоже, что вы должны просто заменить sha1managed на sha1cryptoserviceprovider (в C# вам нужно будет изменить тип переменной экземпляра) в исходном коде, который вы разместили. Вам не нужно добавлять вызов данных, просто используйте ASCIIEncoding.ASCII.GetBytes(pass). Если это не сработает, вы можете отключить соответствие FIPS в системе. Если вы не пишете код для Министерства обороны США или, может быть, банка, это не должно вас волновать. - person imichaelmiers; 23.10.2012
comment
Я использовал sha1cryptoserviceprovider, и после этого он заработал. Спасибо, imichaelmiers! - person StealthRT; 24.10.2012