Как сгенерировать MD5 с помощью VBScript в классическом ASP?
Мне нужно сгенерировать MD5 в моем приложении.
Я пробовал google, но нашел только PHP-код для MD5. Мне нужно подключиться к клиентской системе, которая проверяет с помощью хэша MD5, но их код на PHP, мой-на классическом ASP с использованием VBScript.
Мой сервер поддерживается .Net, поэтому я не могу использовать PHP-скрипт. Есть ли такой код MD5 для VBScript в классическом ASP?
6 ответов:
Я понятия не имею, работает ли этот код вообще, так как у меня нет способа его проверить. Однако, похоже, это то, о чем вы просите.
Вот интересная статья Джеффа Эттвуда о хэшах. У него есть несколько важных вещей, чтобы сказать о MD5:
2017-02-21 обновление - теперь с добавленной hmacsha256 для маркерах JWT
обновление 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 из a файл (полезен для проверки 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.Потоковое решение. Теперь вы можете использовать неанглийский язык персонажи.отредактировано:
Параметр PlainText был изменен на Target. Теперь вы можете использовать версии HMAC.
Просто используйте целевой параметр в качестве массива.Target(0) = PlainText Target(1) = SharedKeyЕще раз спасибо SgtWilko ;)
Анонс первого столкновения SHA1 (блог безопасности Google) 23 февраля 2017 года.
С помощью этой функции вы можете хэшировать обычный текст в:
MD5, RIPEMD160, SHA1, SHA256, SHA384, SHA512, HMACMD5, HMACRIPEMD160, HMACSHA1, HMACSHA256, HMACSHA384 и HMACSHA512
Если вам нужно больше, вы можете найти его в системе: .Безопасность.Пространство Имен КриптографииFunction Hash(HashType, Target) On Error Resume Next Dim PlainText If IsArray(Target) = True Then PlainText = Target(0) Else PlainText = Target End If With CreateObject("ADODB.Stream") .Open .CharSet = "Windows-1252" .WriteText PlainText .Position = 0 .CharSet = "UTF-8" PlainText = .ReadText .Close End With Set UTF8Encoding = CreateObject("System.Text.UTF8Encoding") Dim PlainTextToBytes, BytesToHashedBytes, HashedBytesToHex PlainTextToBytes = UTF8Encoding.GetBytes_4(PlainText) Select Case HashType Case "md5": Set Cryptography = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider") '< 64 (collisions found) Case "ripemd160": Set Cryptography = CreateObject("System.Security.Cryptography.RIPEMD160Managed") Case "sha1": Set Cryptography = CreateObject("System.Security.Cryptography.SHA1Managed") '< 80 (collision found) Case "sha256": Set Cryptography = CreateObject("System.Security.Cryptography.SHA256Managed") Case "sha384": Set Cryptography = CreateObject("System.Security.Cryptography.SHA384Managed") Case "sha512": Set Cryptography = CreateObject("System.Security.Cryptography.SHA512Managed") Case "md5HMAC": Set Cryptography = CreateObject("System.Security.Cryptography.HMACMD5") Case "ripemd160HMAC": Set Cryptography = CreateObject("System.Security.Cryptography.HMACRIPEMD160") Case "sha1HMAC": Set Cryptography = CreateObject("System.Security.Cryptography.HMACSHA1") Case "sha256HMAC": Set Cryptography = CreateObject("System.Security.Cryptography.HMACSHA256") Case "sha384HMAC": Set Cryptography = CreateObject("System.Security.Cryptography.HMACSHA384") Case "sha512HMAC": Set Cryptography = CreateObject("System.Security.Cryptography.HMACSHA512") End Select Cryptography.Initialize() If IsArray(Target) = True Then Cryptography.Key = UTF8Encoding.GetBytes_4(Target(1)) BytesToHashedBytes = Cryptography.ComputeHash_2((PlainTextToBytes)) For x = 1 To LenB(BytesToHashedBytes) HashedBytesToHex = HashedBytesToHex & Right("0" & Hex(AscB(MidB(BytesToHashedBytes, x, 1))), 2) Next If Err.Number <> 0 Then Response.Write(Err.Description) Else Hash = LCase(HashedBytesToHex) On Error GoTo 0 End FunctionИх можно использовать как образом:
Hash("sha512", "Hello World")производит:
2c74fd17edafd80e8447b0d46741ee243b7eb74dd2149a0ab1b9246fb30382f27e853d8585719e0e67cbda0daa8f51671064615d645ae27acb15bfb1447f459bHash("sha256", "Hello World")производит:
a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146eHash("md5", "muñeca")производит:
ea07bec1f37f4b56ebe368355d1c058fHash("sha512HMAC", Array("Hello World", "Shared Key"))производит:
28e72824c48da5a5f14b59246905d2839e7c50e271fc078b1c0a75c89b6a3998746bd8b2dc1764b19d312702cf5e15b38ce799156af28b98ce08b85e4df65b32
Существует код Javascript, который производит контрольную сумму MD5. Один из них, полученный из библиотеки закрытия Google, доступен здесь .
Довольно легко создать компонент скрипта Windows из Javascript, а затем вызвать этот компонент из любого языка с поддержкой COM, включая VB.
Comments