Konvertierung text -> sha512 möglich

  • Hi,
    kennt jemand eine Möglichkeit, Text mit sha512 zu verschlüsseln/nach sha512 zu konvertieren.

    AutoIt bietet ja über _Crypt_HashData zwar die üblichen(häufig genutzten) Hashes, aber ich benötige einen sha512-Hash.
    Momentan löse ich das weniger elegant über einen "Online-Hash-Generator".
    Das gefällt mir allerdings nicht besonders, da...

    • ...niemand sagen kann, was der alles speichert.
    • ...da ein Teil meines Programms dann nur mit Internetverbindung funktioniert.

    Im englischen Forum habe ein paar UDFs gefunden, allerdings hängt sich AutoIt mit diesen auf("...hat ein Problem festgestellt und muss beendet werden.").

    Einmal editiert, zuletzt von penta.phoenix (8. September 2010 um 19:57)

  • Selber nachbauen die Algorithmus in Autoit. Hier findest du einen Pseudocode für den SHA1: klick mich

    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.

  • Wenn Du mir jetzt auch noch sagst, wie, wäre ich dir sehr verbunden.
    Die Idee hatte ich nämlich bereits. Allerdings sagen mir die Funde über google nicht besonders viel.
    Wikipedia sagt mir zum Beispiel:
    "Bei SHA-512 wird mit 1024-Bit-Blöcken und einer Wortbreite von 64 Bit gearbeitet. Es werden 80 64-Bit-Konstanten und sechs logische Funktionen verwendet. Der Initialhash besteht aus acht 64-Bit-Werten, wobei auch hier die Nachkommastellen der Quadratwurzeln der ersten acht Primzahlen herangezogen werden."

    Damit kann ich leider nicht besonders viel anfangen. Ansonsten habe ich bisher nur Seiten gefunden, wo es für andere Sprachen "programmiert" wird. Sprich es wird den Leuten vorgekaut, wie die bereits vorhanden Hash-Erstell-Funktion in VB/C/... aufgerufen wird.

    Edit:
    Das sha1 geht, ist mir klar. Das kann über die von mir genannte _Crypt_HashData()-Funktion erreicht werden.
    Aber sha1 bringt mir nichts, denn sha1 und sha512 sind unterschiedliche Dinge. Das zeigt Wikipedia und jeder "Online-Hash-Generator", der beides kann.
    Mal sehen, ob mir der Pseudo-Code des sha1 was bringt für den sha512...

    Edit2: Wow Prog@ndy, das ist ja mal genial. Da kann ich mir den vermutlich fruchtlosen Versuch, irgendwie von Pseudo-SHA1 zu sinnvollem SHA512 zu kommen, sparen. Ich danke dir.

    2 Mal editiert, zuletzt von penta.phoenix (8. September 2010 um 19:57)

  • Bitte, das ist sogar etwas mehr als verlangt ;) (wenn du es auch für andere Betriebssysteme brauchst, musst du es selbst schreiben oder eine andere DLL wie Crypto++ verwenden)

    Spoiler anzeigen
    [autoit]

    #include<Crypt.au3>
    Global Const $CALG_SHA_256 = 0x0000800c
    Global Const $CALG_SHA_384 = 0x0000800d
    Global Const $CALG_SHA_512 = 0x0000800e
    If Not Is_WinXP_SP3_or_Later() Then
    MsgBox(0, '', "SHA512 geht erst ab WinXP Sp3")
    Exit
    EndIf

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

    MsgBox(0, '', _Crypt_HashData("blub", $CALG_SHA_512))

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

    Func Is_WinXP_SP3_or_Later ()
    ; Author: ProgAndy
    ; based on http://msdn.microsoft.com/en-us/library/…28VS.85%29.aspx
    Local $osvi = DllStructCreate("DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; " & _
    "DWORD dwPlatformId; WCHAR szCSDVersion[128]; WORD wServicePackMajor; WORD wServicePackMinor; WORD wSuiteMask; BYTE wProductType; BYTE wReserved;")

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

    Local $dwlConditionMask;
    Local Const $VER_GREATER_EQUAL = 3;

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

    ;// Initialize the OSVERSIONINFOEX structure.

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

    DllStructSetData($osvi, "dwOSVersionInfoSize", DllStructGetSize($osvi))
    DllStructSetData($osvi, "dwMajorVersion", 5)
    DllStructSetData($osvi, "dwMinorVersion", 1)
    DllStructSetData($osvi, "wServicePackMajor", 3)
    DllStructSetData($osvi, "wServicePackMinor", 0)

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

    ;// Initialize the condition mask.

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

    $dwlConditionMask = DllCall("kernel32.dll", "uint64", "VerSetConditionMask", "uint64", 0, "dword", 2, "byte", $VER_GREATER_EQUAL );
    If @error Then Return SetError(1,0,False)
    $dwlConditionMask = DllCall("kernel32.dll", "uint64", "VerSetConditionMask", "uint64", $dwlConditionMask[0], "dword", 1, "byte", $VER_GREATER_EQUAL );
    If @error Then Return SetError(1,0,False)
    $dwlConditionMask = DllCall("kernel32.dll", "uint64", "VerSetConditionMask", "uint64", $dwlConditionMask[0], "dword", 0x20, "byte", $VER_GREATER_EQUAL );
    If @error Then Return SetError(1,0,False)
    $dwlConditionMask = DllCall("kernel32.dll", "uint64", "VerSetConditionMask", "uint64", $dwlConditionMask[0], "dword", 0x10, "byte", $VER_GREATER_EQUAL );
    If @error Then Return SetError(1,0,False)

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

    ;// Perform the test.

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

    Local $aRes = DllCall("kernel32.dll", "int", "VerifyVersionInfoW", "ptr", DllStructGetPtr($osvi), "dword", BitOR(2 , 1 , 0x20 , 0x10), "uint64", $dwlConditionMask[0]);
    If @error Then Return SetError(2,0,False)
    Return $aRes[0]<>0
    EndFunc

    [/autoit]