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
#!/bin/bash
# Marcus Zurhorst, 2012-01-07
# Lösung zur Findung einer bestimmten MD5sum
# GC2HNJV
# gesucht wird: 39476e43fa1cf7b44c5c373b22166e22
# Muster: N51° 2X.XXX' E006° 2X.XXX'
string1="N51° 2"
string2="."
string3="' E006° 2"
string4="."
string5="'"
z="1" # zählt die Versuche insgesamt!
status="1" #zählt immer bis 5000 und macht dann eine Ausgabe auf der Konsole!
echo Startzeit: `date +%T`
# Test: Einschränkungen
# Nord: von 22.xxx bis 24.xxx
# Ost: von 24.xxx bis 27.xxx
v1="2"
while [ $v1 -le 4 ] # Nord-Koordinate eingeschränkt auf 22.xxx bis 24.xxx
do
v2="0"
while [ $v2 -le 9 ]
do
v3="0"
while [ $v3 -le 9 ]
do
v4="0"
while [ $v4 -le 9 ]
do
v5="4"
while [ $v5 -le 7 ] # Ost-Koordinate eingeschränkt auf 24.xxx bis 27.xxx
do
v6="0"
while [ $v6 -le 9 ]
do
v7="0"
while [ $v7 -le 9 ]
do
v8="0"
while [ $v8 -le 9 ]
do
string=`echo $string1$v1$string2$v2$v3$v4$string3$v5$string4$v6$v7$v8$string5` # String zusammen bauen!
# echo $string # DEBUG
hashvar=`echo -n $string | md5sum` # MD5-Hash berechnen
# echo $hashvar # DEBUG
if [ "`echo $hashvar`" = "39476e43fa1cf7b44c5c373b22166e22 -" ]; # Lösung gefunden ?
then
echo "Lösung gefunden nach" $z "Versuchen:"
echo Endzeit: `date +%T`
echo $string " : " $hashvar
exit # bei Treffer direkt abbrechen!
fi
# alle 5000 einen Status abgeben:
if [ "`echo $status`" = "5000" ];
then
echo $z " : " $string " : " $hashvar
status="0"
fi
status=`expr $status + 1`
z=`expr $z + 1` # alle Versuche mitzählen
v8=`expr $v8 + 1`
done
v7=`expr $v7 + 1`
done
v6=`expr $v6 + 1`
done
v5=`expr $v5 + 1`
done
v4=`expr $v4 + 1`
done
v3=`expr $v3 + 1`
done
v2=`expr $v2 + 1`
done
v1=`expr $v1 + 1`
done
Alles anzeigen