C 带密码的低电平IO

C 带密码的低电平IO,c,encryption,crypt,unistd.h,low-level-io,C,Encryption,Crypt,Unistd.h,Low Level Io,我试图将从文件的每一行提取的加密字符串与AAAA-ZZZZ进行比较,直到找到与密码匹配的字符串。我保证用户密码为4个字符。我试图做的是使用低级IO接收文件,并输出到一个新文件,其中包含每行的解密密码。我还不是C编程的高手,所以请温柔一点。我需要指导如何创建一个数组或列表,从AAAA一直到ZZZZ,然后将每个数组或列表与文件行的解密版本进行比较 如何逐行解密文件并将其保存到char[] 如何将每一行与另一个字符[]进行比较,直到找到密码 例如: 如果行是$1$6gMKIopE$I.zkP2EvrX

我试图将从文件的每一行提取的加密字符串与AAAA-ZZZZ进行比较,直到找到与密码匹配的字符串。我保证用户密码为4个字符。我试图做的是使用低级IO接收文件,并输出到一个新文件,其中包含每行的解密密码。我还不是C编程的高手,所以请温柔一点。我需要指导如何创建一个数组或列表,从AAAA一直到ZZZZ,然后将每个数组或列表与文件行的解密版本进行比较

  • 如何逐行解密文件并将其保存到char[]
  • 如何将每一行与另一个字符[]进行比较,直到找到密码
  • 例如:

    如果行是$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);
    }
    

    ??? 有人能帮忙吗?我已经看了好几遍了,我不知道你在做什么。
    crypt()
    函数是在类似Unix的机器上找到的,还是您自己设计的?您需要纯文本、密钥(密码)和加密文本。我不清楚你打算用什么作为纯文本还是键。如果
    crypt()
    函数是普通的Unix函数,那么您将无法解密任何内容。您将能够使用密钥加密某些内容,并查看它是否与加密文本匹配,但仅此而已。也许你需要再次解释你的问题。@JonathanLeffler在这里发布了一个新的问题,更好地理解了这个问题。我建议删除这个问题,尽管在投票中失去代表可能会让人难以忍受。我再看看另一个问题。???有人能帮忙吗?我已经看了好几遍了,我不知道你在做什么。
    crypt()
    函数是在类似Unix的机器上找到的,还是您自己设计的?您需要纯文本、密钥(密码)和加密文本。我不清楚你打算用什么作为纯文本还是键。如果
    crypt()
    函数是普通的Unix函数,那么您将无法解密任何内容。您将能够使用密钥加密某些内容,并查看它是否与加密文本匹配,但仅此而已。也许你需要再次解释你的问题。@JonathanLeffler在这里发布了一个新的问题,更好地理解了这个问题。我建议删除这个问题,尽管在投票中失去代表可能会让人难以忍受。我再看看另一个问题。???有人能帮忙吗?我已经看了好几遍了,我不知道你在做什么。
    crypt()
    函数是在类似Unix的机器上找到的,还是您自己设计的?您需要纯文本、密钥(密码)和加密文本。我不清楚你打算用什么作为纯文本还是键。如果
    crypt()
    函数是普通的Unix函数,那么您将无法解密任何内容。您将能够使用密钥加密某些内容,并查看它是否与加密文本匹配,但仅此而已。也许你需要再次解释你的问题。@JonathanLeffler在这里发布了一个新的问题,更好地理解了这个问题。我建议删除这个问题,尽管在投票中失去代表可能会让人难以忍受。我再看看另一个问题。
    $1$6gMKIopE$I.zkP2EvrXHDmApzYoV.B.
    $1$pkMKIcvE$WQfqzTNmcQr7fqsNq7K2p0
    $1$0lMKIuvE$7mOnlu6RZ/cUFRBidK7PK.