我有一个存储用户名,salt和完全哈希密码的文件。在纯文本文件中,salt和密码只是一堆随机字符。我需要从文件中提取字段并将它们插入到链表中,但我遇到了一些问题。我知道fgets在到达\ n字符时会停止读取一行,但由于某种原因,它没有拾取任何\ n并且它将整个文件读取为1行(我认为)。我添加了“::::::::”来分隔字段。这是文件。
mike ::::::::ÉáŠú7þP)°ºËëá|ò=³7åM+å2÷h |gÝ#ayŸ³ÔZ5W§£“û£Éù30Z䶫àÃê3j»Éöœ[fä]¹or!¢§yADÊñ ¿5åùEB%9oŒdi~Ê'7::::::::gÜnmë!5ªv?NPÐæPןÎ*
肯:::::::: ^ú«G7áŽzŽüÜÄÍÊ»-Mýeßleõ¥; A€UU“S€Z9 RÃæ«Aæž Y | ÙE|“€Å”æ@JreQÈGúz6õîxK1ÉÔæBkDáwœòE:“À¥Hâ€;kÕ3:::::::: M¥÷é?`;Ä?p÷÷ 7²ìÆÖäM%C
这是我正在使用的功能
void loadFileIntoList (char * filename, FILE* fp){
unsigned char * hashed;
unsigned char * salt;
char * username;
char line[3000];
if (fp == NULL){
printf("file could not be opened");
}
while(fgets(line, sizeof(line), fp)){
username = strtok(line, "::::::::");
salt = (unsigned char *)strtok(NULL, "::::::::");
hashed = (unsigned char *)strtok(NULL, "::::::::");
//user, pass, salt, hashed. just putting in "" for pass
addAccount(username, "", salt, hashed);
}
fclose(fp);
}
线的大小可能是它只循环一次的原因,但我不知道我应该知道它应该有多大。
我想在第一个哈希之后或第二个用户名之前需要另一组“::::::::”。但这是我的输出(只是打印行,用户,盐和哈希)
有关如何正确执行此操作的任何见解?