HashString.dll

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

  • Die HashString.dll errechnet die Hash-Summe für Strings. Somit müssen bei Vergleichen nicht die Strings verglichen werden (= langsam), sondern nur LongInts.


    Die verwendete Technik arbeitet sehr schnell und ist relativ sicher gegenüber Kollisionen. Mein Tool XChange arbeitet mit dieser Methode und verwaltet 50000 (eher kurze) Strings, ohne dass eine Kollision stattfinden würde. Ist also mindestens ideal für wenige und mittlere String-Mengen.


    Download: http://frabbing.net/HashStringDll.zip


  • Hi Frank, habe ja deine Hashstring.dll hier & da im Einsatz. Funzt ja auch prächtig (klein & vor allem schnell - (ich liebe schnelle Software ;-))). Im aktuellen Projekt brauche ich diesen Wert aber in einer konstanten Länge. was ja die LongInts nicht sind.
    Wenn ich aber diese LongInts in einem HexString wandle, haben sie in meine Testreihe immer artig die gleiche Länge - also alles so, wie ich es brauche.
    Bin mir aber trotzdem nicht sicher, ob es nicht irgendwann doch einen Ausreißer geben könnte & wollt dich lieber nochmal um Rat fragen, ob meine Theorie vllt. doch auf Sand gebaut ist...


    Übrigens kann man das Teil hier ja gar nicht mehr runterladen...

    Gruß Jörg


    Ideen gibt es viele - man muß sie nur haben...
    Win7-Pro / Linux Mint

  • Hi Jörg,


    die Chance eines Ausreissers beträgt 1 : 4294967295. Sofern die zu vergleichende Datenbank nicht viele Millionen Einträge enthält, wird die Technik auf jeden Fall sehr sicher sein.
    Spricht auch nichts dagegen, die LongInts als Hexadezimal zu verwalten. :-)


    Ist wieder online.

  • Bei Bedarf kannst du die Strings einfach mit führenden Nullen auffüllen, bevor du sie in die Liste packst:


  • Jo alles klar - das wollt ich hören/lesen, Frank :-)
    War also die richtige Entscheidung...
    Und Jörg, danke für den CodeSchnipsel. Für vereinzelte Hashstring-Operationen ist das in der Tat eine gute Option, um 100%tig sicher zu gehen, daß die HexStrings gleich lang sind, wenn man das nach der Erzeugung prüft & ggf. ausgleicht. Kommt bei mir auf jeden Fall öfter vor...
    In einer Schleife die z.B. 400 000 Hashstrings erzeugt, würde das wohl wie 'ne kleine Bremse wirken (fürchte ich - kommt auf einem Test an)
    Es sei denn, Frank hat sowas ebenfalls in seiner Assembler-Tool-Kiste...
    Hilft mir alles aber so schon weiter - werde das jetzt mal alles richtig ausprogrammieren...
    Danke ;-)

    Gruß Jörg


    Ideen gibt es viele - man muß sie nur haben...
    Win7-Pro / Linux Mint

  • Du kannst natürlich auch das profaneigene Format nehmen:

    Code
    Format$("00000000",n1&)


    Das ist noch etwas schneller. Ansonsten kommt das natürlich auf die Geschwindigkeit an, mit der die Werte bei dir auflaufen. Wenn sie in einer Schleife tausendfach produziert werden, ist die Prüfung immer eine Bremse.
    Je nachdem, was du dann damit machst, kannst du sie anschließend dann vielleicht besser prüfen. Evtl in einer SortedListbox, wo du nur die zu kurzen Werte ändern musst.

  • Hallo zusammen,
    zur Abwechslung benötige ich eine Hashsumme für Strings im SH1 Format. Gibt es dafür vllt. einen Schalter dafür in der Hashstring.dll oder muß ich dafür eine andere dll/Funktion suchen?
    Die bordeigene Windowsfunktion erstellt ja nur von Dateien einen SH1 Wert. (hab ich zumindest so verstanden)

    Gruß Jörg


    Ideen gibt es viele - man muß sie nur haben...
    Win7-Pro / Linux Mint

  • Nur für kurze Strings müsste das recht einfach über API zu lösen sein. Selbst für XProfan dürfte das ohne aufwendige Spalterei noch schnell genug sein, um eine GUI nicht haken zu lassen. Schwierig wird es est bei Dateien.

  • ja die Strings sind sehr kurz (ich will damit nur Passwörter verwalten). Über die die API-Beschreibung bin ich ja auch schon gestolpert, aber im Beispiel wurde dies nur an Dateien demonstriert. D.h. der 2. Parameter war ein Dateipfad. Ich brauch das an dieser Stelle als String, oder Zeiger auf String bzw. Bereich.


    Sonst hätte ich ja, wie gehabt, Franks DLL verwendet, aber es sollen in diesem Fall halt SH1 hashes sein, damit ein anderes (fremdes) Programm diese Werte ebenfalls zum Vergleich heranziehen kann.



    Würde mir ja schon weiterhelfen, wenn ich den Namen + Funktion der API kenne (falls in Windows vorhanden), die Strings encodiert.
    Im Inet bin zwar auf fastmd5.exe gestoßen, aber das ist ein Programm mit GUI.
    KommandozeilenOptionen hab ich da noch nicht entdeckt. Bin aber noch am frickeln...

    Gruß Jörg


    Ideen gibt es viele - man muß sie nur haben...
    Win7-Pro / Linux Mint

  • Die APIs brauchst du:

    • CryptAcquireContext
    • CryptReleaseContext
    • CryptCreateHash
    • CryptHashData
    • CryptGetHashParam
    • CryptDestroyHash

    Ich brauche die Funktionalität nicht und habe die nächsten Wochen auch keine Zeit, meine PCU für MD5 für Dateien auf SHA1 für Strings umzuschreiben.

  • ok danke,
    hab jetzt nicht damit gerechnet, daß man zum erzeugen so viele Funktionen braucht.
    Das sieht sehr kompliziert aus.
    So auf Anhieb, würde ich einfach CryptCreateHash aus dieser Liste ausprobieren :)


    Ich mach mal...

    Gruß Jörg


    Ideen gibt es viele - man muß sie nur haben...
    Win7-Pro / Linux Mint

  • ohh - jetzt wird mir langsam klar, warum so viele Funktionen.
    Die CryptCreateHash braucht diese als 'Zuarbeit' etc.
    Ist ja wirklich umständlich.


    Hat Microsoft denn vllt. eine Kompaktversion parat?
    stell mir das z.B so vor: (schematisch)


    Erfolg=bauhash(Zeiger auf String,Zeiger auf Bereich fürs Ergebnis,Longwert für hash-Algo[1=md5, 2=SHA1, usw.])



    Und was MS dann im Hintergrund veranstaltet, ist ja eigtl, unwichtig.
    Der Ergebnis-Bereich wird dann irgendwann von mir 'disposed' und alles gut :)


    Wird es bestimmt nicht geben, wollte nur bissl Wunschdenken ablassen ;)

    Gruß Jörg


    Ideen gibt es viele - man muß sie nur haben...
    Win7-Pro / Linux Mint

  • Mit der hashes.dll kannst du alle möglichen Hashes berechnen: SHA, Ripe-MD, Tiger...

    XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
    Ryzen 5800X/Gigabyte B550m DS3H/32GB RAM@3600MHz/Radeon HD7770 OC/Asus Xonar SE/108TB HDD+512GB Samsung 980 Pro+2TB Crucial SSD/28" Samsung 4k
    TerraMaster F4-421 mit 28TB
    XBox Classic/360S/Series X/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84)
    OnePlus 6 8GB/256GB
    jacdelad.bplaced.net