Как генерировать MD5 с помощью VBScript в классическом ASP?

Мне нужно создать MD5 в моем приложении.

Я пробовал google, но только найти PHP-код для MD5. Мне нужно подключиться к клиентской системе, которая проверяет использование хэша MD5, но их код находится в PHP, мой-в классическом ASP с использованием VBScript.

мой сервер поддерживается .Net, поэтому я не могу использовать php-скрипт. Есть ли такой код MD5 для VBScript в классическом ASP?

6 ответов


Я понятия не имею, работает ли этот код, так как у меня нет возможности его протестировать. Однако, кажется, это то, о чем вы просите.

http://www.bullzip.com/md5/vb/md5-vb-class.htm

вот интересная статья Джеффа Эттвуда о хэшах. У него есть некоторые важные вещи, чтобы сказать о MD5:

http://www.codinghorror.com/blog/2012/04/speed-hashing.html


обновление 2017-02-21-теперь с добавлением HMACSHA256 для JWTs

обновление 2016-07-05-теперь с добавлением SHA1 и SHA256

правильно, для всех вас, кто боролся с этим (как и я) и хочет знать, это возможно!

следующий код разделен на несколько функций, так что вы можете либо MD5/sha1/sha256 строку, либо файл.

я позаимствовал функции GetBytes и BytesToBase64 из другого stackexchange, а код в stringToUTFBytes основан на другом stackexchange.

function md5hashBytes(aBytes)
    Dim MD5
    set MD5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")

    MD5.Initialize()
    'Note you MUST use computehash_2 to get the correct version of this method, and the bytes MUST be double wrapped in brackets to ensure they get passed in correctly.
    md5hashBytes = MD5.ComputeHash_2( (aBytes) )
end function

function sha1hashBytes(aBytes)
    Dim sha1
    set sha1 = CreateObject("System.Security.Cryptography.SHA1Managed")

    sha1.Initialize()
    'Note you MUST use computehash_2 to get the correct version of this method, and the bytes MUST be double wrapped in brackets to ensure they get passed in correctly.
    sha1hashBytes = sha1.ComputeHash_2( (aBytes) )
end function

function sha256hashBytes(aBytes)
    Dim sha256
    set sha256 = CreateObject("System.Security.Cryptography.SHA256Managed")

    sha256.Initialize()
    'Note you MUST use computehash_2 to get the correct version of this method, and the bytes MUST be double wrapped in brackets to ensure they get passed in correctly.
    sha256hashBytes = sha256.ComputeHash_2( (aBytes) )
end function

function sha256HMACBytes(aBytes, aKey)
    Dim sha256
    set sha256 = CreateObject("System.Security.Cryptography.HMACSHA256")

    sha256.Initialize()
    sha256.key=aKey
    'Note you MUST use computehash_2 to get the correct version of this method, and the bytes MUST be double wrapped in brackets to ensure they get passed in correctly.
    sha256HMACBytes = sha256.ComputeHash_2( (aBytes) )
end function

function stringToUTFBytes(aString)
    Dim UTF8
    Set UTF8 = CreateObject("System.Text.UTF8Encoding")
    stringToUTFBytes = UTF8.GetBytes_4(aString)
end function

function bytesToHex(aBytes)
    dim hexStr, x
    for x=1 to lenb(aBytes)
        hexStr= hex(ascb(midb( (aBytes),x,1)))
        if len(hexStr)=1 then hexStr="0" & hexStr
        bytesToHex=bytesToHex & hexStr
    next
end function

Function BytesToBase64(varBytes)
    With CreateObject("MSXML2.DomDocument").CreateElement("b64")
        .dataType = "bin.base64"
        .nodeTypedValue = varBytes
        BytesToBase64 = .Text
    End With
End Function

'Special version that produces the URLEncoded variant of Base64 used in JWTs.
Function BytesToBase64UrlEncode(varBytes)
    With CreateObject("MSXML2.DomDocument").CreateElement("b64")
        .dataType = "bin.base64"
        .nodeTypedValue = varBytes
        BytesToBase64UrlEncode = replace(replace(replace(replace(replace(.Text,chr(13),""),chr(10),""),"+", "-"),"/", "_"),"=", "")
    End With
End Function

Function GetBytes(sPath)
    With CreateObject("Adodb.Stream")
        .Type = 1 ' adTypeBinary
        .Open
        .LoadFromFile sPath
        .Position = 0
        GetBytes = .Read
        .Close
    End With
End Function

эти можно использовать следующим образом:

BytesToBase64(md5hashBytes(stringToUTFBytes("Hello World")))

производит: sQqNsWTgdUEFt6mb5y4 / 5Q==

bytesToHex(md5hashBytes(stringToUTFBytes("Hello World")))

производит: B10A8DB164E0754105B7A99BE72E3FE5

для алгоритма SHA1:

bytesToHex(sha1hashBytes(stringToUTFBytes("Hello World")))

производит: 0A4D55A8D778E5022FAB701977C5D840BBC486D0

для И SHA256:

bytesToHex(sha256hashBytes(stringToUTFBytes("Hello World")))

производит: A591A6D40BF420404A011733CFB7B190D62C65BF0BCDA32B57B277D9AD9F146E

чтобы получить MD5 файла (полезно для проверки Amazon S3 MD5):

BytesToBase64(md5hashBytes(GetBytes(sPath)))

где sPath-это путь к локальному файлу.

и, наконец, чтобы создать JWT:

'define the JWT header, needs to be converted to UTF bytes:
aHead=stringToUTFBytes("{""alg"":""HS256"",""typ"":""JWT""}")

'define the JWT payload, again needs to be converted to UTF Bytes.
aPayload=stringToUTFBytes("{""sub"":""1234567890"",""name"":""John Doe"",""admin"":true}") 

'Your shared key.
theKey="mySuperSecret"

aSigSource=stringToUTFBytes(BytesToBase64UrlEncode(aHead) & "." & BytesToBase64UrlEncode(aPayload))

'The full JWT correctly Base 64 URL encoded.
aJWT=BytesToBase64UrlEncode(aHead) & "." & BytesToBase64UrlEncode(aPayload) & "." & BytesToBase64UrlEncode(sha256HMACBytes(aSigSource,stringToUTFBytes(theKey)))

который произведет следующее действительное JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXvcj9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtzsi6ikpvag4grg9liiwiywrtaw4ionrydwv9.7ofvtkn0z_pTl6WcqRTxw-4eSE3NqcEq9_3ax0YcuIQ


Спасибо за все ссылки, приведенные выше, они были полезны, но этот, который я нашел, действительно сделал работу, если кто-нибудь когда-нибудь понадобится. VBScript-MD5


вот читаемая и загружаемая версия MD5 в качестве скрипта VBS:

https://github.com/Wikinaut/md5.vbs

Это код из http://chayoung.tistory.com/entry/VBScript-MD5 (Спасибо за этот уникальный кусок кода).


прежде всего, спасибо SgtWilko! :)

основываясь на собранной вами информации, я сделал одну функцию для всех (не для base64/Files).
Ваш код был очень полезен для меня, но я искал более PHP-функцию (простую) для работы с простым текстом и с более явным кодом.

редактировать:
На основании выданного как хэшировать строку UTF-8 в классическом ASP, Я придумал ADODB.Поток решение. Теперь можно использовать неанглийские символы.

редактировать:
Параметр обычный текст было изменено на цель. Теперь вы можете использовать HMAC версий.
Просто используйте параметр Target в качестве массива.

Target(0) = PlainText
Target(1) = SharedKey

еще раз спасибо SgtWilko ;)

объявление о первом столкновении SHA1 (Блог Безопасности Google) 23 Февраля, 2017.

С помощью этой функции вы можете хэшировать простой текст в:
алгоритм MD5, RIPEMD160, SHA1 и SHA256 с, значения sha384, криптография SHA512, HMACMD5, HMACRIPEMD160, HMACSHA1, тип hmacsha256, HMACSHA384 и HMACSHA512
Если вам нужно больше, вы можете найти его в:


существует код Javascript, который создает контрольную сумму MD5. Один из них, полученный из библиотеки закрытия Google, является здесь.

довольно легко создать компонент сценария Windows из Javascript, а затем вызвать этот компонент с любого языка с поддержкой COM, включая VB.

вот рабочий пример.