[英]crypt function in C breaking password string in for loop
我是C語言的新手,而且我一直在學習CS50課程,以學習一些基礎知識。 我一直在嘗試解決要求您做一個簡單的密碼破解程序的挑戰,但是遇到一個阻止我編寫功能程序的問題:每次在for循環中調用crypt函數時,都會以某種方式破壞密碼我正在遍歷的字符串。
我嘗試過復制密碼字符串,並將其作為參數傳遞給crypt; 我還嘗試過將crypt調用移到一個單獨的函數中,然后從循環中調用它(以及兩者的結合)
#define _XOPEN_SOURCE
#include <unistd.h>
#include <cs50.h>
#include <stdio.h>
#include <string.h>
string buildLetterDictionary();
int main(int argc, string argv[])
{
if (argc == 2)
{
printf("Two arguments, starting test...\n");
char password[2];
string letters = buildLetterDictionary();
for(int i = 0; i < 5; i++)
{
password[0] = letters[i];
password[1] = '\0';
printf("Password: %s\n", password);
string hashed = crypt(password, "50");
printf("\n%i\nOriginal: %s\nHashed: %s\n", i, password, hashed);
}
return 0;
}
else
{
printf("Usage: ./crack hash");
return 1;
}
}
string buildLetterDictionary()
{
char letters[27];
for(int i = 65; i < 91; i++)
{
letters[i-65] = i;
}
letters[26] = '\0';
string letter = letters;
return letter;
}
如果我注釋掉這些行:
string hashed = crypt(password, "50");
printf("\n%i\nOriginal: %s\nHashed: %s\n", i, password, hashed);
該代碼按預期工作,並產生輸出:
A
B
C
D
E
但是,如果我保留這些行,則密碼第一次以散列為“ 50pe4e2XTIS / g”的形式輸出為'A',但隨后的所有時間都以散列為“ 50sXZPq5euCxs”的形式以“”形式輸出
請讓我知道潛在的問題是什么,以便我可以努力解決它! 感謝您的任何幫助!
我在這里猜測cs50.h
包含一些定義,例如從char *
到教授為簡化起見而給出的string
的類型別名 。
如果是這樣,則buildLetterDictionary()
無法正常工作,因為您正在執行以下操作:
char letters[27];
...
char * letter = letters;
return letter;
這意味着您將返回一個局部變量的地址,該變量將在離開函數后立即銷毀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.