#hash #asp-classic
#хэш #asp-классический
Вопрос:
Когда Sha256 и md5 добавляются вместе, включите в страницу
<!--#include file="hash/sha256.asp"-->
<!---#include file="hash/md5.asp"--->
выдает эту ошибку
Microsoft VBScript derleme hatasý hata '800a0411'
Ad yeniden tanýmlandý
/3wPay/include/hash/md5.asp, satır 3
Private Const BITS_TO_A_BYTE = 8
--------------^
но он работает сам по себе, когда включен md5 или sha256.
Как я могу запустить оба варианта вместе
Ответ №1:
Я не знаю, что говорит эта ошибка, но я предполагаю, что BITS_TO_A_BYTE уже определено. Я бы очистил оба этих файла и создал 3-й файл со всеми вашими константами и удалил константы из обоих этих файлов.
Когда вы создаете свой 3-й файл, определите каждую константу только один раз.
Затем включайте его всякий раз, когда вы используете либо md5.asp, либо sha256.asp
Ответ №2:
Как уже упоминалось, похоже, у вас есть 2 константы с одинаковым именем. Более эффективной и компактной альтернативой, на мой взгляд, было бы использовать System.Security.Cryptography.X
объект, который поддерживает MD5, SHA1, SHA256, SHA384 и SHA512.
Приведенный ниже пример кода также позволяет кодировать как Hex или Base64:
<%
Function Hash(ByVal Input, Alg, Encoding)
Dim hAlg, hEnc
Set hAlg = CreateObject("System.Security.Cryptography." amp; Get_Hash_Obj(Alg))
Set hEnc = CreateObject("System.Text.UTF8Encoding")
Hash = BinaryEncode(hAlg.ComputeHash_2(hEnc.GetBytes_4(Input)),Encoding)
Set hEnc = Nothing
Set hAlg = Nothing
End Function
Function Get_Hash_Obj(Alg)
' Get the cryptography class name for the specified hashing algorithm,
' return the class name for SHA1 if not found
Select Case uCase(Alg)
Case "MD5"
Get_Hash_Obj = "MD5CryptoServiceProvider"
Case "SHA1"
Get_Hash_Obj = "SHA1CryptoServiceProvider"
Case "SHA256"
Get_Hash_Obj = "SHA256Managed"
Case "SHA384"
Get_Hash_Obj = "SHA384Managed"
Case "SHA512"
Get_Hash_Obj = "SHA512Managed"
Case Else
Get_Hash_Obj = "SHA1CryptoServiceProvider"
End Select
End Function
Function BinaryEncode(Binary, Encoding)
Dim Enc
Encoding = lCase(Encoding)
Set Enc = CreateObject("MSXML2.DomDocument").CreateElement("encode")
If Encoding = "base64" OR Encoding = "b64" Then
' base64 string
Enc.DataType = "bin.base64"
Enc.NodeTypedValue = Binary
BinaryEncode = Enc.Text
Else
' Hexadecimal string
Enc.DataType = "bin.hex"
Enc.NodeTypedValue = Binary
BinaryEncode = Enc.Text
End If
Set Enc = Nothing
End Function
%>
Пример:
Response.Write Hash("Hello World","SHA256","Hex")
Response.Write Hash("Hello World","SHA256","Base64") ' Or B64
Вывод:
a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
pZGm1Av0IEBKARczz7exkNYsZb8LzaMrV7J32a2fFG4=