В ASP мы использовали функцию MD5 в ASP, используемом форумом Rudong.com и т. д. Строка, зашифрованная функцией MD5, выглядит следующим образом:
1165d25d8cd021d5
А в Asp.Net следующий метод:
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text, "MD5")
Результат шифрования MD5:
12C403B91165D25D8CD021D5F9B5BB7F
Причина в том, что функция MD5 в ASP использует биты с 9 по 25 32-битного хэш-значения MD5, а затем изменяет его на строчные буквы в виде зашифрованного текста. Зная это, результаты ASP.NET можно использовать для сравнения строк паролей в старых базах данных с небольшой обработкой.
В функции ASP MD5 строки 353 и 354:
'MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
MD5=LCase(WordToHex(b) & WordToHex(c)) 'Я обрезаю это, чтобы оно соответствовало 16-байтовому паролю базы данных :D
Первое предложение — взять весь 32-битный зашифрованный текст, а второе предложение — взять биты с 9 по 25 в середине в качестве 16-битного зашифрованного текста.
Когда дело доходит до vb.net, проблема возникает снова. В vb.net нельзя использовать пространство имен System.Web.Security, а простой метод, описанный выше, нельзя использовать для шифрования MD5. Поэтому я написал следующую функцию для ее обработки:
VB.NET:
'Функция шифрования MD5
Открытая общая функция MD5 (ByVal strSource как строка, код ByVal как Int16) как строка
«Здесь используется исходный текст пароля в кодировке ascii. Если вы хотите использовать китайские символы в качестве пароля, вы можете использовать UnicodeEncoding, но он будет несовместим с функцией MD5 в ASP.
Dim dataToHash As Byte() = (New System.Text.ASCIIEncoding).GetBytes(strSource)
Dim hashvalue As Byte() = CType(System.Security.Cryptography.CryptoConfig.CreateFromName("MD5"), System.Security.Cryptography.HashAlgorithm).ComputeHash(dataToHash)
Тусклый я как целое число
Выберите код дела
Случай 16 'Выберите результат шифрования 16-битных символов
Для я = от 4 до 11
MD5 += Hex(хэш-значение(i)).ToLower
Следующий
Случай 32 'Выберите результат шифрования 32-битных символов
Для я = от 0 до 15
MD5 += Hex(хэш-значение(i)).ToLower
Следующий
Case Else 'Если код неправильный, верните всю строку, то есть 32-битные символы.
Для i = 0 Для хеш-значения. Длина - 1
MD5 += Hex(хэш-значение(i)).ToLower
Следующий
Конец выбора
конечной функции
: БЛОГ AndyDavis