Низкий уровень ввода-вывода с Crypt

Я пытаюсь сравнить зашифрованную строку, взятую из каждой строки файла, с AAAA-ZZZZ, пока не найдет совпадение пароля. Я гарантирую, что пароль пользователя состоит из 4 символов. То, что я пытаюсь сделать, это взять файл с помощью LowLevel IO и вывести в новый файл с расшифрованными паролями каждой строки. Я не лучший в программировании на C, поэтому, пожалуйста, будьте осторожны. Мне нужно руководство о том, как создать массив или список, начиная от AAAA вплоть до ZZZZ, а затем сравнивая каждый из них с расшифрованной версией строки файла.

  1. Как расшифровать файл построчно и сохранить его на символ []
  2. Как сравнить каждую строку с другим символом [], пока не будет найден пароль

Например:

если линия $1$6gMKIopE$I.zkP2EvrXHDmApzYoV.B. и следующая строка: $1$pkMKIcvE$WQfqzTNmcQr7fqsNq7K2p0. Предполагая, что полученный пароль после дешифрования будет ABSZ и TAZE, новый файл будет содержать ABSZ в первой строке и TAZE во второй строке.

Это то, что я до сих пор:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void pdie(const char *);
void die(const char *);

#define BUFFER_SIZE 1024 

int main(void)
{
   char *pass;
   int rfd;   
   int wfd;   
   char buffer[BUFFER_SIZE];   
   char *bp;   
   int bufferChars;   
   int writtenChars;  

   if ((rfd = open("pass.txt", O_RDONLY, 0)) < 0)
      pdie("Open failed");

   if ((wfd = open("passout.txt", O_WRONLY | O_CREAT | O_TRUNC,
                   S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) < 0)
      pdie("Open failed");

   while (1)
   {   
      if ((bufferChars = read(rfd, buffer, BUFFER_SIZE)) > 0)
      {
         printf("%s", buffer);

         bp = buffer; 
         pass = crypt(getpass(all(4,4,'a','z')), *bp);  

         printf(pass);
         while (bufferChars > 0)
         {
            if ((writtenChars = write(wfd, bp, bufferChars)) < 0)
               pdie("Write failed");

            bufferChars -= writtenChars;
            bp += writtenChars;
         }
      }
      else if (bufferChars == 0)  
         break;
      else   
         pdie("Read failed");
   }
   close(rfd);
   close(wfd);

   return 0;
}


void pdie(const char *mesg) {

   perror(mesg);
   exit(1);
}

void die(const char *mesg) {

   fputs(mesg, stderr);
   fputc('\n', stderr);
   exit(1);
}

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

int all(int a, int n,char begin, char end){
    int i,j;
    char *c = malloc((n+1)*sizeof(char));
    for(i=a;i<=n;i++){
        for(j=0;j<i;j++) c[j]=begin;
        c[i]=0;
        do {
            printf("%s\n",c);
        } while(inc(c,begin,end));
    }
    free(c);
}

вот файл:

$1$6gMKIopE$I.zkP2EvrXHDmApzYoV.B.
$1$pkMKIcvE$WQfqzTNmcQr7fqsNq7K2p0
$1$0lMKIuvE$7mOnlu6RZ/cUFRBidK7PK.

0 ответов

Другие вопросы по тегам