Я пишу программу, которая берет файл с 3 строками зашифрованных паролей и сравнивает их со всеми 4 строчными буквами от aaaa-zzzz. Единственная проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как идти по строкам файла, который я вводил, и как сравнить его с четырьмя буквами в отдельности. Затем он должен распечатать 3 расшифрованных слова из 4 букв, которые коррелируют с паролями из файла. Также, если есть какие-либо типы улучшения кода, пожалуйста, дайте мне знать. Я новичок в этом, поэтому мне нужны ясные объяснения и примеры, если это возможно. Спасибо.Файл ввода/вывода низкого уровня Сравнение строк
РЕДАКТИРОВАТЬ *****
Основная проблема заключается в всей функции и основные. Я не хочу печатать aaaa, aaab, aaac и т. Д. На экране, но я хочу поместить его в массив char, чтобы я мог сравнивать каждый отдельно от каждой строки из файла с помощью crypt. Поэтому мне нужен совет о том, как поместить все комбинации 456976 в массив, сравнить его с каждой строкой кода и распечатать решения на экране.
файл выглядит следующим образом:
$1$6gMKIopE$I.zkP2EvrXHDmApzYoV.B.
$1$pkMKIcvE$WQfqzTNmcQr7fqsNq7K2p0
$1$0lMKIuvE$7mOnlu6RZ/cUFRBidK7PK.
Мой код выглядит следующим образом:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define BUFFER_SIZE 1024
int my_fgets(char* buf, int len, int f)
{
for (int i = 0; i < len; i++,buf++)
{
int count = read(f, buf, 1);
if (!count || (buf[0] == '\n'))
{
buf[0] = 0;
return i;
}
}
return 0;
}
int inc(char *c,char begin, char end){
if(c[0]==0)
return 0;
if(c[0] == end){ // This make the algorithm to stop at char 'f'
c[0]=begin; // but you can put any other char
return inc(c+sizeof(char), begin, end);
}
c[0]++;
return 1;
}
char all(int a, int n,char begin, char end){
int i, j;
char *c = malloc((n+1)*sizeof(char));
char result[] = "";
for(i = a; i <= n; i++)
{
for(j=0;j<i;j++) c[j]=begin;
c[i]=0;
do {
int k = sizeof(result);
for (int g = 0; g < k -1; g++)
{
result[g] = c;
}
} while(inc(c,begin,end));
}
free(c);
}
int main(int argc, char* argv[])
{
char *result;
char let[456976];
int f = open("pass.txt", O_RDONLY);
if (f < 0)
return 0;
char buf[1024];
while (my_fgets(buf, sizeof(buf), f))
{
let = all(4,4,'a','z');
int i = 0;
result = crypt((let[i+1]), buf);
int ok = strcmp (result, pass) == 0;
return ok ? 0 : 1;
all(4, 4, 'a', 'z');
}
close(f);
}
Почему 'ssize_t г = чтения (RFD, буфер, 1); return r; '? Кажется странным возвращать количество прочитанных вещей. Я бы ожидал 'ssize_t r = read (rfd, buffer, 1); return buffer [0]; 'с некоторой проверкой ошибок. – chux
О, я мог это видеть. Im также имеет проблемы с преобразованием строки кода в символы char *, поэтому я могу использовать его для тестирования в функции криптографии .... @chux – kids
Отредактирован вопрос о новых проблемах – kids