我有下面的代码,在情况1中我首先尝试:注册一个新密码并将其写入文件,此方法有效,在情况2中我遇到的问题是:我正在尝试使用户提供一个密码以通过crypt函数对其进行加密,然后使用先前文件中的所有加密密码对其进行身份验证。但是,当我对此进行编译时,出现错误“ Segmentation Fault”。在我看来,问题将出在log_password和对加密消息的转换中。任何帮助将是巨大的。#define _GNU_SOURCE#include <stdio.h>#include <time.h>#include <unistd.h>#include <crypt.h>#include <string.h>#include <sys/stat.h>intmain(void){FILE *f=fopen("shadow.txt","a+"); char * line=NULL; unsigned long seed[2]; char *log_password,salt[] = "$1$........"; const char *const seedchars = "./0123456789ABCDEFGHIJKLMNOPQRST" "UVWXYZabcdefghijklmnopqrstuvwxyz"; char *password,*pass; int i,ans; /* Generate a (not very) random seed. You should do it better than this... */ seed[0] = time(NULL); seed[1] = getpid() ^ (seed[0] >> 14 & 0x30000); /* Turn it into printable characters from ‘seedchars’. */ for (i = 0; i < 8; i++) salt[3+i] = seedchars[(seed[i/5] >> (i%5)*6) & 0x3f]; printf("Press 1 for Register.\n"); printf("Press 2 for Login.\n"); printf("Press 3 for Exit.\n"); scanf("%d",&ans); switch(ans) { case 1: password = crypt(getpass("Password:"), salt); fprintf(f,"%s \n",password); printf("Succesfull Register in file\n"); fclose(f); break; case 2: fgets(pass,34,f); log_password = crypt(getpass("Login Password:"), pass); int ok; ok = strcmp (log_password, pass) == 0; puts(ok ? "Access granted." : "Access denied."); return ok ? 0 : 1; break; case 3: printf("Bye\n"); exit(1); break; default: printf("Try Again.\n"); break; } return 0;}
- 1 回答
- 0 关注
- 265 浏览
添加回答
举报
0/150
提交
取消