|
| gliba 22.05.2009 17:24 Иногда возникает необходимость использовать криптографический хеш, например, при хранении паролей в базе данных. В настоящее время для этих целей наиболее широко используются алгоритмы 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 символов. |