爲了神聖的代碼的愛,我想比較哈希找到正確的密碼。我給出一個哈希作爲命令行參數,我再從「一」到「ZZZZ」湊字,直到哈希對比賽之一。C:比較哈希值似乎消失
void decipher(string hash)
{
//Set the password, and the salt.
char pass[4] = "a";
char salt[] ="50";
//Compare the crypted pass againts the hash until found.
while (strcmp(hash,crypt(pass, salt)) != 0)
{
//Use int i to hold position, and return next char
int i = 0;
pass[i] = get_next(pass[i]);
tick_over (pass, i);
//Hardcode in a fail safe max length: exit.
if (strlen(pass) > 4)
{
break;
}
}
printf("%s\n", pass);
}
的問題是,它不會「抓」了正確的密碼/比較,當密碼爲4個字母。它適用於1,2和3個字母的單詞。
//Tick over casino style
string tick_over (string pass, int i)
{
//Once a char reaches 'Z', move the next char in line up one value.
char a[] = "a";
if (pass[i] == 'Z')
{
if (strlen(pass) < i+2)
{
strncat (pass, &a[0], 1);
return pass;
}
pass[i+1] = get_next(pass[i+1]);
//Recursively run again, moving along the string as necessary
tick_over (pass, i+1);
}
return pass;
}
//Give the next character in the sequence of available characters
char get_next (char y)
{
if (y == 'z')
{
return 'A';
}
else if (y == 'Z')
{
return 'a';
}
else
{
return y + 1;
}
}
它遍歷正確的單詞,正如我在調試中發現的那樣。我試圖將
strcmp(hash, crypt(pass, salt)) == 0
變成一個嵌套的if語句等,但它似乎不是問題。 c以某種方式'忘記'命令行值?在調試散列值時似乎已經消失:/請幫忙!
謝謝這個工作。但是,較早創建tick_over方法和「安全性」測試前,通過[4]做的工作 - 在密碼哈希將匹配,並從迴路斷線。我很好奇 - 你會知道爲什麼會發生這種情況,是否導致覆蓋的安全測試? – sena
但你確實有不確定的行爲,因爲你寫出界。這就像俄羅斯輪盤賭一樣。在某個時候你輸了。安全測試只讀取這樣的數字。這是任何超出界限的寫入操作。 RAM很便宜。放大緩衝區,你很好走。 –