2014-07-09 4 views
6

In diesem cryptography post bekommen es sagtRainbow Table: Kann nicht zuletzt Reduktion

Die Kette so lange gehen können, wie Sie wollen, bis er den ursprünglichen Eingangs trifft. Wenn es diesen Punkt erreicht, wird es sich einfach wiederholen und es wird nutzlos sein.

Also mein Ausgangspunkt ist 12345 aber ich kann nicht den Endpunkt und eine endlosen Schleife erhalten, weil 12345 nicht wiederholt. Ich verwende (lib Version: 4.7.3), um dies zu erreichen. Hier ist mein Code

rainbowTable::rainbowTable(QWidget *parent) : 
QWidget(parent), 
ui(new Ui::rainbowTable) 
{ 
    ui->setupUi(this); 
    passwordLength = 5; 
    qDebug() << getLastReduction("12345",false); 
} 

QString rainbowTable::hashString(QString value) 
{ 
    QString dataToReturn = QString(QCryptographicHash::hash((value.toAscii()),QCryptographicHash::Md5).toHex()); 
    return dataToReturn; 
} 

QString rainbowTable::reductionOfString(QString hash) 
{ 
    QString dataToReturn = ""; 
    int iterator = 0; 

    while (iterator < hash.count()) 
    { 
     if (hash.at(iterator) == '0' || 
      hash.at(iterator) == '1' || 
      hash.at(iterator) == '2' || 
      hash.at(iterator) == '3' || 
      hash.at(iterator) == '4' || 
      hash.at(iterator) == '5' || 
      hash.at(iterator) == '6' || 
      hash.at(iterator) == '7' || 
      hash.at(iterator) == '8' || 
      hash.at(iterator) == '9') 
     { 
      dataToReturn += hash.at(iterator); 
      if(dataToReturn.count() == passwordLength) 
       break; 
     } 

     iterator++; 
    } 

    return dataToReturn; 
} 

QString rainbowTable::getLastReduction(QString value,bool isHash) 
{ 
    int flagToAvoidImmediateExit = 0; 
    if(isHash) 
    { 
     QString startPoint = value; 
     startPoint = reductionOfString(startPoint); 

     QString endPoint = ""; 
     QString tempPoint = startPoint; 
     while(startPoint != tempPoint || flagToAvoidImmediateExit == 0) 
     { 
      flagToAvoidImmediateExit = 1; 

      endPoint = tempPoint; 
      tempPoint = hashString(tempPoint); 
      tempPoint = reductionOfString(tempPoint); 

      qDebug() << tempPoint; 
     } 

     return endPoint; 
    } 
    else 
    { 
     QString startPoint = value; 

     QString endPoint = ""; 
     QString tempPoint = startPoint; 

     while(startPoint != tempPoint || flagToAvoidImmediateExit == 0) 
     { 
      flagToAvoidImmediateExit = 1; 

      endPoint = tempPoint; 
      tempPoint = hashString(tempPoint); 
      tempPoint = reductionOfString(tempPoint); 

      qDebug() << tempPoint; 
     } 

     return endPoint; 
    } 
} 

Hier wird die Debug-ouput für einige Sekunden:

"38064" 
"37923" 
"59636" 
"14842" 
"81105" 
"83011" 
"84978" 
"72903" 
"28301" 
"59067" 
"94222" 
"35329" 
"75907" 
"52980" 
"64297" 
"36654" 
"12207" 
"83738" 
"03523" 
"79083" 
"15597" 
"32652" 
"13934" 
"88497" 
"75435" 
"79791" 
"58265" 
"09856" 
"18041" 
"43966" 
"65978" 
"64242" 
"52739" 
"55704" 
"56811" 
"58183" 
"68597" 
"84064" 
"85717" 
"46438" 
"18042" 
"71321" 
"88067" 
"70648" 
"83580" 
"11878" 
"32297" 
"52376" 
"41289" 
"07909" 
"50439" 
"03819" 
"50325" 
"82736" 
"41621" 
"05497" 
"15546" 
"64017" 
"90503" 
"13150" 
"30287" 
"01749" 
"81308" 
"12036" 
"37241" 
"35850" 
"97225" 
"80539" 
"17472" 
"63098" 
"85818" 
"18438" 
"26139" 
"09545" 
"97042" 
"63672" 
"37406" 
"41180" 
"14910" 
"28900" 
"29729" 
"56861" 
"16208" 
"83565" 
"30912" 
"95541" 
"08468" 
"29539" 
"93679" 
"42487" 
"95833" 
"42793" 
"97064" 
"18087" 
"75623" 
"13910" 
"60404" 
"52557" 
"95932" 
"65477" 
"28304" 
"08456" 
"27849" 
"11429" 
"38896" 
"08634" 
"97107" 
"96385" 
"44159" 
"32875" 
"17063" 
"86213" 
"85052" 
"46852" 
"97541" 
"81412" 
"31199" 
"96618" 
"16178" 
"56100" 
"50394" 
"42087" 
"90552" 
"51966" 
"13598" 
"28757" 
"38715" 
"71025" 
"61334" 
"43686" 
"74633" 
"50360" 
"99883" 
"01361" 
"49662" 
"62929" 
"07280" 
"59161" 
"32509" 
"93670" 
"95649" 
"15206" 
"99927" 
"93692" 
"37748" 
"23350" 
"74680" 
"68259" 
"04819" 
"26627" 
"65968" 
"06919" 
"09194" 
"50084" 
"74452" 
"23763" 
"17953" 
"35026" 
"86691" 
"67542" 
"95634" 
"00793" 
"20270" 
"24386" 
"35606" 
"76055" 
"00010" 
"00798" 
"30867" 
"20697" 
"02143" 
"12044" 
"05098" 
"52828" 
"98446" 
"54039" 
"08778" 
"98405" 
"92267" 
"71783" 
"61953" 
"87447" 
"66505" 
"66535" 
"01776" 
"90120" 
"51497" 
"56082" 
"18253" 
"15222" 
"74769" 
"19614" 
"86376" 
"65391" 
"43365" 
"90484" 
"32717" 
"75052" 
"16186" 
"89444" 
"15439" 
"65166" 
"75785" 
"72462" 
"75920" 
"91383" 
"41678" 
"94123" 
"61751" 
"47976" 
"67798" 
"59438" 
"10180" 
"65854" 
"40218" 
"77990" 
"44843" 
"84554" 
"52350" 
"73347" 
"51901" 
"61155" 
"30316" 
"83096" 
"64946" 
"05985" 
"24208" 
"28718" 
"02241" 
"22303" 
"23331" 
"18410" 
"54868" 
"51723" 
"06401" 
"49554" 
"65577" 
"28105" 
"42319" 
"34167" 
"85036" 
"98679" 
"08594" 
"31075" 
"80514" 
"11517" 
"66780" 
"33411" 
"83180" 
"61910" 
"70423" 
"16885" 
"09107" 
"83702" 
"81842" 
"88430" 
"59146" 
"29140" 
"47236" 
"29625" 
"03078" 
"26540" 
"79321" 
"41649" 
"10210" 
"75702" 
"12020" 
"36877" 
"57307" 
"03222" 
"46603" 
"58449" 
"94709" 
"01436" 
"84975" 
"39385" 
"15952" 
"67607" 
"91666" 
"34456" 
"53385" 
"21512" 
"06712" 
"42073" 
"61343" 
"66825" 
"70199" 
"73203" 
"60216" 
"39469" 
"84324" 
"47850" 
"84825" 
"52471" 
"92397" 
"86051" 
"33676" 
"04221" 
"79740" 
"11573" 
"26304" 
"52510" 
"12679" 
"05930" 
"49607" 
"10880" 
"99174" 
"53967" 
"06397" 
"25700" 
"96721" 
"94694" 
"96566" 
"31746" 
"57359" 
"84870" 
"06236" 
"10673" 
"45914" 
"19209" 
"32478" 
"38824" 
"71178" 
"22983" 
"36320" 
"46594" 
"66538" 
"80495" 
"35645" 
"38064" 
"37923" 
"59636" 
"14842" 
"81105" 
"83011" 
"84978" 
"72903" 
"28301" 
"59067" 
"94222" 
"35329" 
"75907" 
"52980" 
"64297" 
"36654" 
"12207" 
"83738" 
"03523" 
"79083" 
"15597" 
"32652" 
"13934" 
"88497" 
"75435" 
"79791" 
"58265" 
"09856" 
"18041" 
"43966" 
"65978" 
"64242" 
"52739" 
"55704" 
"56811" 
"58183" 
"68597" 
"84064" 
"85717" 
"46438" 
"18042" 
"71321" 
"88067" 
"70648" 
"83580" 
"11878" 
"32297" 
"52376" 
"41289" 
"07909" 
"50439" 
"03819" 
"50325" 
"82736" 
"41621" 
"05497" 
"15546" 
"64017" 
"90503" 
"13150" 
"30287" 
"01749" 
"81308" 
"12036" 
"37241" 
"35850" 
"97225" 
"80539" 
"17472" 
"63098" 
"85818" 
"18438" 
"26139" 
"09545" 
"97042" 
"63672" 
"37406" 
"41180" 
"14910" 
"28900" 
"29729" 
"56861" 
"16208" 
"83565" 
"30912" 
"95541" 
"08468" 
"29539" 
"93679" 
"42487" 
"95833" 
"42793" 
"97064" 
"18087" 
"75623" 
"13910" 
"60404" 
"52557" 
"95932" 
"65477" 
"28304" 
"08456" 
"27849" 
"11429" 
"38896" 
"08634" 
"97107" 
"96385" 
"44159" 
"32875" 
"17063" 
"86213" 
"85052" 
"46852" 
"97541" 
"81412" 
"31199" 
"96618" 
"16178" 
"56100" 
"50394" 
"42087" 
"90552" 
"51966" 
"13598" 
"28757" 
"38715" 
"71025" 
"61334" 
"43686" 
"74633" 
"50360" 
"99883" 
"01361" 
"49662" 
"62929" 
"07280" 
"59161" 
"32509" 
"93670" 
"95649" 
"15206" 
"99927" 
"93692" 
"37748" 
"23350" 
"74680" 
"68259" 
"04819" 
"26627" 
"65968" 
"06919" 
"09194" 
"50084" 
"74452" 
"23763" 
"17953" 
"35026" 
"86691" 
"67542" 
"95634" 
"00793" 
"20270" 
"24386" 
"35606" 
"76055" 
"00010" 
"00798" 
"30867" 
"20697" 
"02143" 
"12044" 
"05098" 
"52828" 
"98446" 
"54039" 
"08778" 
"98405" 
"92267" 
"71783" 
"61953" 
"87447" 
"66505" 
"66535" 
"01776" 
"90120" 
"51497" 
"56082" 
"18253" 
"15222" 
"74769" 
"19614" 
"86376" 
"65391" 
"43365" 
"90484" 

Wie Sie sehen 12345 nicht wiederholen, aber andere Zahlen werden wiederholt und Endlos-Schleife mit. Ist mein Startpunkt falsch?

Antwort

24

Es ist nicht garantiert, dass die Kette jemals wieder den Anfangswert erreicht. Öfter als nicht wahrscheinlich eine Schleife wie diese ihr werden Sie feststellen eingeben:

1 -> 2 -> 3 -> 4 -> 2 -> 3 -> 4 -> 2 -> ...

Wenn der Eingang größer ist als der Hash-Ausgabe ist, ist es per Definition nicht immer wieder den ursprünglichen Eingangswert getroffen. Selbst wenn die Eingabe die gleiche Länge wie die Ausgabe hat, ist es nicht garantiert, dass der Hash-Wert jeden einzelnen möglichen Wert im Ausgabebereich abdeckt, bevor er umgangen wird. Dies hängt tatsächlich von den Merkmalen und der Qualität des Hashes ab. Ein Hash kann einen großen Zyklus haben, der jeden einzelnen möglichen Ausgabewert in seiner Schleife abdeckt. Andere Hashes können eine Anzahl von verschiedenen möglichen Schleifen eingeben, die jeweils eine andere Teilmenge des Ausgangsraums abdecken. Andere Hashes decken möglicherweise nicht alle möglichen Ausgabewerte ab.

+0

Warum wird das hinzugefügte Bild nicht gefunden? Ich verstehe deine Antwort noch nicht vollständig. Bedeutet es, dass die akzeptierte Antwort auf den Link, den ich poste, falsch ist? – reggie

+0

Bild lädt sich gut für mich. Die verknüpfte Antwort ist per se nicht inkorrekt, ich würde sagen, dass es nur ein wenig mehr Klarheit braucht. Die allgemeine Idee wird richtig erklärt, die kleine Einschränkung, dass nicht immer jede Kette ihren Eingabewert wieder trifft, fehlt. – deceze

+0

Dies ist der Link des Bildes richtig? http://i.stack.imgur.com/sh0F4.png es sagt 404 nicht gefunden Ich benutze Linux und versuchte, dies auf Windows zu öffnen, aber immer noch nicht gefunden. Anyway auf dem Code, den ich tat, was sind die Dinge sollte ich ändern? oder es ist unmöglich mein Ziel zu erreichen, weil ich md5 als Beispiel benutze? – reggie