Отправляет email-рассылки с помощью сервиса Sendsay

Секреты программирования

  Все выпуски  

Секреты программирования - получение криптографического хеша в ASP


Уважаемые подписчики!

Сегодняшняя тема - получение криптографического хеша в ASP.
Иногда возникает необходимость использовать криптографический хеш, например, при хранении паролей в базе данных. В настоящее время для этих целей наиболее широко используются алгоритмы MD5 и SHA1, которые имеют много реализациий, в том числе и у Microsoft. Однако получение криптографического хеша в ASP не совсем тривиально, в связи с редким использованием и слабым документированием, в отличии от .NET. Потратив довольно много времени, мне удалось написать функцию, которая решает поставленную задачу. Код в VBS иллюстрирует этот подход.

Код



<%@ LANGUAGE="VBScript"%>
<%
option explicit

dim source
source = Request("source")
if source = "" then source = "Hello World!"

function getHash( str )
dim oUTF8, oMD5, abyt, i, k, hi, lo, chHi, chLo
 getHash = ""
 set oUTF8 = Server.CreateObject("System.Text.UTF8Encoding")
 set oMD5 = Server.CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")

 abyt = oMD5.ComputeHash_2(oUTF8.GetBytes_4( str ))
' Response.Write "len=" & LenB(abyt) & "<br>"
 for i = 1 to LenB(abyt)
  k = AscB(MidB( abyt, i, 1 ))
     lo = k Mod 16
     hi = (k - lo) / 16
     if hi > 9 then
         chHi = Chr(Asc("a") + hi - 10)
     else
         chHi = Chr(Asc("0") + hi)
     end if
     if lo > 9 then
         chLo = Chr(Asc("a") + lo - 10)
     else
         chLo = Chr(Asc("0") + lo)
     end if
     getHash = getHash & chHi & chLo
 next

 set oUTF8 = nothing
 set oMD5 = nothing
end function

Response.Write "hash( '" & source & "' ) = '" & getHash(source) & "'"
'The MD5 hash of Hello World! is: ed076287532e86365e841e92bfc50d8c.
%>



Комментарии

Объект oUTF8 = Server.CreateObject("System.Text.UTF8Encoding") используется для преобразования строки в последовательность байтов. Внимание, недокументированный метод GetBytes_4. Объект oMD5 = Server.CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider") реализует хеширование. Внимание, недокументированный метод ComputeHash_2. Он создает хеш из 16 байтов. Далее форматируем его побайтно (выделяя старшую и младшую 16-ричные цифры) в строку из 32 символов.

Для улучшения "обратной связи" приглашаю обсудить рассылку на форуме сайта http://www.pvobr.ru в разделе "Программирование". Пишите также, какие темы вы хотите рассмотреть в будущем.

Успехов! Андрей

ЗЫ
Программист не может оторваться от компьютера. Родители вызвали доктора. Доктор осмотрел его и сказал:
- Его придётся лечить!
Родители:
- Как?
- Сигаретами, выпивкой, девочками...

В избранное