Geocaching: benötige Hilfe bei Bash-Skript bzw. Alternative in C

  • Hallo zusammen!


    Ich habe ein Nicht-VDR-Thema, aber ich bin nur in diesem Board unterwegs, und mein "Problem" hat auch etwas mit Computern zu tun.
    Und zwar möchte ich gerne einen Geocache-Schatz heben, und der Verstecker hat die Koordinaten mit einem MD5-Hash codiert.


    Die Aufgabe ist furchtbar einfach:
    Unter gegebener Notation der Koordinaten hat er 8 Variablen in seinem Ansatz, nun muss man im Worst-Case wohl 10^8 Hashes berechnen und vergleichen mit dem Original.


    Hier der Link, da ist die Aufgabe beschrieben: http://www.geocaching.com/seek/cache_details.aspx?wp=GC2HNJV



    Leider habe ich absolut keine Ahnung, und habe einfach 10 Schleifen ineinander gestapelt.
    Aber mein Skript kommt hier auf meinem Laptop nur auf ~165 Hashs pro Sekunde, und damit würde ich ca. 176 Stunden rumrechnen müssen.



    Meine erste Idee war, dass man wohl einfach nur die Varianten einschränken müsste, da hier auch ein 100 km² großes Feld abgesucht wird.
    Totaler Amok.



    Aber in den Logs steht auch drin, dass manche Leute es in C, wieder andere in Java oder auch PHP programmiert haben.
    Und wenn ich dann lese, dass dort binnen Sekunden die Lösung da ist, dann bin ich echt baff. Hätte nie gedacht, dass der Faktor zwischen Skript und Code derart riesig ist.
    (Einer hatte Zahlen drin und kommt auf über 200.000 Hashs pro Sekunde...)



    Stelle ich mich einfach nur total doof an, oder ist ein Skript dafür einfach nur absolut ungeeignet ?
    -- Oder ist mein Skript an sich ineffizient ?



    Vielen Dank für ein paar Tipps!
    - Evtl. ist der ein oder andere ja auch angeregt auf eine kleine Rekordjagd. (ok, bei der Nummer bin ich dann eh direkt draußen *gg*)


    Gruß,
    Marcus





    Hardware: Zalman HD160XT; Asus H97M-Plus, 1024MB RAM, Digital Devices Cine S2 (rev 7), Atric-Einschalter, NEC3520 DVD-Laufwerk, Samsung 256 GB SSD-Festplatte --> darauf yaVDR 0.6
    Hifi: Denon AVR4306, Samsung UE40ES6300

  • Meine erste Idee war, dass man wohl einfach nur die Varianten einschränken müsste, da hier auch ein 100 km² großes Feld abgesucht wird.

    Im Prinzip richtig, aber bei Nord hast du etwas zu viel gekürzt. ;) Außerdem gibt md5sum das Ergebnis mit zwei Leerzeichen aus. Und du musst darauf achten, das Skript als UTF-8 zu speichern. So müsstest du irgendwann auch ein Ergebnis erhalten. ;)


    Aber in den Logs steht auch drin, dass manche Leute es in C, wieder andere in Java oder auch PHP programmiert haben.
    Und wenn ich dann lese, dass dort binnen Sekunden die Lösung da ist, dann bin ich echt baff. Hätte nie gedacht, dass der Faktor zwischen Skript und Code derart riesig ist.

    Viel besser wird es mit einem Shell-Skript wohl nicht. Für jede MD5-Berechnung muss ein neuer Prozess gestartet werden, und das dauert eben. Ich habe auf meinem Rechner zum Testen md5sum in einer Endlosschleife immer wieder dieselbe Hash berechnen lassen und kam dabei gerade einmal auf 500 Hashes pro Sekunde. Dann habe ich das spaßeshalber in Python nachprogrammiert und hatte ruckzuck die Lösung. ;)


    Nachtrag: Vergiss das mit den Leerzeichen ... `echo` hat mich verwirrt.

    Give root password for maintenance (or type Control-D to continue): _

    Einmal editiert, zuletzt von tag ()

  • Hi,


    versuchs mal mit john the ripper. Das ist ein Passwortbruteforcer - der sollte für solche Fälle ganz gut sein...


    cu


    cp

    easyVDR 0.6: VDR: Asus M2N-VM DVI, 2GB RAM, AMD A64 X2 4000+ EE, Samsung SpinPoint T166 400GB SATA II, LG Electronics GSA-H62N schwarz DVD Brenner, TT1.5 FF, TT Budget verpackt in einem Silverstone LC17 Gehäuse.
    Client: MediaMVP


    yavdr 0.3a:Asus M4A78LT-M LE, 4GB RAM, AMD Athlon II X2 240e, Asus Geforce ENGT520, 320GB Samsung Spinpoint M7 HM320II, 300W be quiet! Pure Power L7, TT-Budget S2-1600, EKL Alpenföhn Panorama, verpackt in einem Techsolo TC-380 HTPC Gehäuse


    yavdr 0.5: Intel DH67GD, Intel Pentium G620 2x 2.60GHz So.1155, 60GB Corsair Force 3 SSD, 8GB Ram, Linux4Media S2 ver 5.4, Asus ENGT 520 Silent, CoHaus CIR


    TV: Panasonic 42" Plasma TH-42PV45

  • Witzige Sache.


    Ich habe deine Code übernommen und nach Java umgeschrieben.
    Ist etwas schneller. Auf meinen core i5 sind es > 700.000 Hashs pro Sek.


    HD-VDR:
    HW: ZOTAC D2550-ITX | Mystique SaTiX-S2 Sky Xpress DUAL
    SW: Debian Stretch | vdr-2.3.8

    3 Mal editiert, zuletzt von oberlon ()

  • Das gleiche in Perl:



    Etwa 440.000 Hashes pro Sekunde auf einem AMD Athlon(tm) 64 X2 Dual Core Processor 5200+. Innerhalb von 43 Sekunden habe ich ein Ergebnis.

  • Meine Version in C:



    etwas mehr als 7 Sekunden auf einem AMD Athlon(tm) 64 X2 Dual Core Processor 6000+:

    Code
    time ./geocache 
    Lösung: N51° 21.896' E006° 25.262'
    
    
    real	0m7.441s
    user	0m7.428s
    sys	0m0.000s


    Läst sich sicher noch was rausholen, hatte aber nicht so viel Zeit (und Lust) :D


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Code
    Startzeit: Di, 0:36:41
    
    
    Lösung gefunden im 18965263. Versuch:
    N51° 21.896' E006° 25.262' hat Hash: 39476e43fa1cf7b44c5c373b22166e22
    
    
    Stopzeit: Di, 0:37:24
    43 Sekunden Laufzeit; ~441052 Hashs/s berechnet!!



    Ich habe mir heute mal Perl beigebracht! :D
    Meins ist aber ein paar Hashes langsamer auf meinem 2GHz-Laptop.




    Nun gut, dann muss ich die Dose nur noch heben demnächst ! ;D



    Gruß,
    Marcus



    PS: Mein Bash-Skript hatte übrigens einen blöden Fehler, da war immer ein Zeilenumbruch mit im Hash, da habe ich Millionen falscher Prüfsummen berechnet :-/

    Hardware: Zalman HD160XT; Asus H97M-Plus, 1024MB RAM, Digital Devices Cine S2 (rev 7), Atric-Einschalter, NEC3520 DVD-Laufwerk, Samsung 256 GB SSD-Festplatte --> darauf yaVDR 0.6
    Hifi: Denon AVR4306, Samsung UE40ES6300

Jetzt mitmachen!

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