问题代码
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int findLastDigit(char* str);
void fMain();
char* encrypt(char* str, int key);
int timeGet();
void res();
void equal(char ap);
char str[100],pwd[8];
int findLastDigit(char* str)
{
int len = strlen(str);
for (int i = len - 1; i >= 0; i--)
{
if (isdigit(str[i]))
{
return str[i]-'0';
}
}
return -1;
}
void fMain()
{
scanf("%s",pwd);
int ed=findLastDigit(pwd); // fix here
char* spd=encrypt(pwd, ed); // fix here
FILE *fp = fopen("pwd.txt", "w");
if (fp == NULL)
{
printf("Failed to open file.\n");
exit(-1);
}
char edc=ed+'0';
fprintf(fp, "%s", spd);
fprintf(fp, "%c", edc);
fclose(fp);
printf("String written to file successfully.\n");
}
void res()
{
FILE *fp = fopen("pwd.txt", "r");
if (fp == NULL)
{
printf("Failed to open file.\n");
exit(-1);
}
char epwd[20];
fgets(epwd,20,fp);
char *p = epwd; // 指向字符串的指针
char lc = p[strlen(p) - 1]; // 获取最后一个字符
int ld=lc-'0';
char aPwd[50];
int len = strlen(epwd) - 1; // 字符串长度减1
char run[8];
epwd[len]='\0';
ld=0-ld;
scanf("%s",run);
char *spd=encrypt(epwd,ld);
if (strcmp(run,spd)==0)
{
equal(lc);
}
}
void equal(char lc)
{
char ap[20];
int eTime=timeGet();
char* spd=encrypt(ap,eTime);
strcat(spd,&lc);
system("pwd");
puts("ok!");
exit(0);
}
char* encrypt(char* str, int key)
{
// 分配足够的内存来保存加密后的字符串
char* encryptedStr = (char*)malloc(strlen(str) + 1);
for(int i = 0; str[i]; i++)
{
// 先将字符转化为其ASCII码
int ascii = (int)str[i];
// 加密ASCII码
ascii = (ascii + key) % 256;
// 再将ASCII码转化回字符
encryptedStr[i] = ascii;
}
// 添加字符串的结束符
encryptedStr[strlen(str)] = '\0';
// 返回加密后的字符串
return encryptedStr;
}
int timeGet()
{
time_t rawtime;
struct tm * timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
return timeinfo->tm_year + timeinfo->tm_mon + timeinfo->tm_mday + timeinfo->tm_hour + timeinfo->tm_min;
}
int main()
{
int d;
puts("are you want to do");
puts("1.write password");
puts("2.check&run-exec");
puts("3.write a visual password");
scanf("%d",d);
switch(d)
{
case 1:
fMain();
break;
case 2:
res();
break;
case 3:
break;
}
return 0;
}