2014-07-09 7 views
6

를 가져올 수 없습니다 그것은 원래의 입력을 돌 때까지 체인은, 당신이 원하는만큼 갈 수레인보우 테이블 :이 <a href="https://crypto.stackexchange.com/questions/5900/example-rainbow-table-generation">cryptography post</a>에서 마지막 감소를

말한다. 그 점에 도달하면, 그것은 단지 반복 될 것이고 쓸모 없을 것입니다.

그래서 내 출발점은 12345하지만 난이 엔드 포인트를 얻을 12345 반복하지 않는 때문에 무한 루프를 가진 수 없습니다. 이를 달성하기 위해 (lib 버전 : 4.7.3)을 사용하고 있습니다. 당신이 12345 반복하지 않습니다 볼 수 있지만 다른 숫자가 반복 무한 루프가있는 것처럼

"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" 

: 여기에 내 코드 여기

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; 
    } 
} 

는 몇 초 동안 디버그 출력 상입니다이다. 출발점이 잘못 되었습니까?

답변

24

체인이 초기 값에 다시 도달하지 않을 수도 있습니다. 더 자주 당신은 아마 찾을 수없는 것보다이 같은 루프를 입력하면 : 입력이 해시 출력보다 큰

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

경우, 다시 초기 입력 값을 칠 정의 불가능하다. 그러나 입력이 출력과 길이가 같더라도 해싱이 출력 공간에서 가능한 모든 단일 값을 처리 할 것이라는 보장은 없습니다. 이것은 실제로 해시의 특성과 품질에 따라 달라집니다. 해시는 하나의 빅주기를 가질 수 있으며 루프의 모든 가능한 단일 출력 값을 포함합니다. 다른 해시는 여러 개의 가능한 루프를 입력 할 수 있으며 각 루프는 출력 공간의 다른 하위 집합을 포함합니다. 다른 해시는 가능한 모든 출력 값을 처리하지 못할 수도 있습니다.

+0

왜 추가하는 이미지를 찾을 수 없습니까? 나는 아직 당신의 대답을 완전히 이해하지 못합니다. 내가 게시 한 링크에 대한 답변이 잘못되었음을 의미하는 Doest입니까? – reggie

+0

이미지가 저를 위해 잘로드됩니다. 링크 된 답변 자체가 틀린 것은 아니며, 약간의 설명이 필요하다고 말하고 싶습니다. 일반적인 아이디어는 정확하게 설명되어 있습니다. 모든 체인이 항상 입력 값에 다시 도달하지는 않는다는 작은주의 사항이 빠져 있습니다. – deceze

+0

이것은 이미지의 링크입니까? http://i.stack.imgur.com/sh0F4.png 404가 발견되지 않는다고 말했어. 나는 리눅스를 사용 중이며 창문에서 이것을 열려고했지만 여전히 발견되지 않았다. 어쨌든 내가했던 코드에서 무엇을 바꿔야합니까? 또는 md5를 예제로 사용하기 때문에 내 목표를 달성하는 것이 불가능합니까? – reggie