CRC32 Hash vergleich AutoIt + PHP

  • Hallo,
    ich möchte gerne den CRC32 Hash vergleich der mit AutoIt und PHP generiert wurde.
    Leider bekomme ich für den String "a" folgendes raus:
    AutoIt: 4278190080
    PHP: -390611389 oder 3904355907

    Kennt jemand eine Möglichkeit den selben Hash mit AutoIt zu erzeugen, denn ich mit PHP bekomme?
    Mit freundlichen Grüßen,
    Freaky

  • Den CRC32 Script in Autoit ist schlicht fehlerhaft. Hier ein funktionierendes:

    Spoiler anzeigen
    [autoit]


    MsgBox(0,"",_CRC32("a"))

    [/autoit] [autoit][/autoit] [autoit]

    Func _CRC32($Data, $CRC32 = -1)
    Local $Opcode = '0xC800040053BA2083B8EDB9000100008D41FF516A0859D1E8730231D0E2F85989848DFCFBFFFFE2E78B5D088B4D0C8B451085DB7416E3148A1330C20FB6D2C1E80833849500FCFFFF43E2ECF7D05BC9C21000'

    [/autoit] [autoit][/autoit] [autoit]

    Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
    DllStructSetData($CodeBuffer, 1, $Opcode)

    [/autoit] [autoit][/autoit] [autoit]

    Local $Input = DllStructCreate("byte[" & BinaryLen($Data) & "]")
    DllStructSetData($Input, 1, $Data)

    [/autoit] [autoit][/autoit] [autoit]

    Local $Ret = DllCall("user32.dll", "uint", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
    "ptr", DllStructGetPtr($Input), _
    "int", BinaryLen($Data), _
    "uint", $CRC32, _
    "int", 0)

    [/autoit] [autoit][/autoit] [autoit]

    $Input = 0
    $CodeBuffer = 0

    [/autoit] [autoit][/autoit] [autoit]

    Return $Ret[0]
    EndFunc ;==>_CRC32

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Viele Dank.
    Gibt es davon auch eine File Version mit einem Ausgabewert in Hex?
    Weil mit der Funktion in PHP kommt ein anderer Hash raus, als wenn ich die Datei mit AutoIt einlese und dann hashe :/

    Code
    hash_file ("crc32", "./files/file.dat")
  • Ich vermute mal es liegt daran wie du die Datei einliest. Standardmäßig öffnet fileread die Datei im Ansi oder UTF Mode. Wenn du sie binär einlesen willst musst du zuvor fileopen mit dem entsprechenden Flag für Binär Daten verwenden.

    [autoit]

    fileopen

    [/autoit]