Я застрял в pset2 на cs50, и, честно говоря, я думаю, что мне чего-то не хватает, я не знаю, смогу ли я продвинуться в курсе, не будучи в состоянии по-настоящему понять некоторые основы.
Я пытаюсь сделать это, и затем я думаю, что я сделаю паузу и все еще изучу некоторые основы о c.
Мне нужна помощь с этим, а также больше комментариев, за которые я был бы очень признателен.
так в основном вот мой код
#define _XOPEN_SOURCE
#include <cs50.h>
#include <stdio.h>
#include <crypt.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
bool crack(string given_hash);
int main(int argc, string argv[])
{
if (argc != 2)
{
printf("Usage ./crack hash\n");
return 1;
}
if (!crack(argv[1]))
return 1;
}
bool crack(string given_hash)
{
string Alphabet = "abcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXYZ";
char key[6];
char salt[3];
salt[2] = '\0';
for (int x = 0; x < 2; x++)
{
salt[x] = given_hash[x];
}
// single-letter keys.
for (int i = 0; i < 52; i++)
{
key[0] = Alphabet[i], key[1] = '\0';
string new_hash = crypt(key,salt);
if (strcmp(new_hash, given_hash) == 0)
{
printf("you got the key: %s\n",key);
return 0;
}
}
// for 2-letter keys.
for (int i = 0; i < 52; i++)
{
key[0] = Alphabet[i], key[2] = '\0';
for (int j = 0; j < 52; j++)
{
key[1] = Alphabet[j];
}
string new_hash = crypt(key,salt);
if (strcmp(new_hash, given_hash) == 0)
{
printf("you got the key: %s\n",key);
return 0;
}
}
// for 3-letter keys.
for (int i = 0; i < 52; i++)
{
key[0] = Alphabet[i], key[3] = '\0';
for (int j = 0; j < 52; j++)
{
key[1] = Alphabet[j];
for (int k = 0; k < 52; k++)
{
key[2] = Alphabet[k];
}
}
string new_hash = crypt(key,salt);
if (strcmp(new_hash, given_hash) == 0)
{
printf("you got the key: %s\n",key);
return 0;
}
}
// for 4-letter keys.
for (int i = 0; i < 52; i++)
{
key[0] = Alphabet[i], key[4] = '\0';
for (int j = 0; j < 52; j++)
{
key[1] = Alphabet[j];
for (int k = 0; k < 52; k++)
{
key[2] = Alphabet[k];
for( int l = 0; l < 52; l++)
{
key[3] = Alphabet[l];
}
}
}
string new_hash = crypt(key,salt);
if (strcmp(new_hash, given_hash) == 0)
{
printf("you got the key: %s\n",key);
return 0;
}
}
// for 5-letter keys.
for (int i = 0; i < 52; i++)
{
key[0] = Alphabet[i], key[5] = '\0';
for (int j = 0; j < 52; j++)
{
key[1] = Alphabet[j];
for (int k = 0; k < 52; k++)
{
key[2] = Alphabet[k];
for(int l = 0; l < 52; l++)
{
key[3] = Alphabet[l];
for(int m = 0; m < 52; m++)
{
key[4] = Alphabet[m];
}
}
}
}
string new_hash = crypt(key,salt);
if (strcmp(new_hash, given_hash) == 0)
{
printf("you got the key: %s\n",key);
return 0;
}
}
}
теперь я не знаю, что я делаю неправильно, я знаю, что эта ошибка связана с тем, что в функции, не являющейся пустотой, нет возврата, но как я могу это исправить?