Когда Sha256 и md5 складываются вместе

#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=