用C语言做一个密码保管箱

    在网上冲浪或使用各种软件的时候,经常需要输入密码,如果都使用同样的密码,那么当密码泄漏的时候,就会引发灾难性后果,所以大家都要有一个密码保管箱来保存自己各网站的密码,现使用C语言开发一款密码保管箱工具,用来保存自己在网站或者app上注册的账号和密码,功能如下:

1.使用密码保管箱必须登陆,验证使用者的身份才可继续,否则,软件退出
2.密码保管箱每条记录需提供网站名称(或app名称),网址,用户名,密码,手机号码,邮箱等相关信息,同时对于重要的数据需要进行加密存储,以防其他人直接通过打开存储文件的方式读取到所有密码
3.提供添加,修改,删除,按分类(网站或app)的方式管理密码保管箱内的密码
4.为了保障密码的安全性,密码保险箱存储密码的文件需要与程序放在不同的位置
5.可以根据网站名称,网址等进行查询,也可根据密码分类(网站或app)进行显示
6.查询,显示,删除等操作应进行二次验证才允许展示,
7.可以记录密码的查询时间以及查询次数以供后续备查


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义密码记录的结构体
typedef struct {
    char website[100];
    char url[100];
    char username[100];
    char password[100];
    char phone[100];
    char email[100];
    int accessCount;
    char lastAccessTime[100];
} PasswordRecord;

// 函数声明
int login();
void encrypt(char *password);
void decrypt(char *password);
void addRecord();
void modifyRecord();
void deleteRecord();
void displayRecords();
void searchByCategory();
void searchByKeyword();
void verifyAction();

// 主函数
int main() {
    if (login()) {
        int choice;
        while (1) {
            printf("\n-------------------------\n");
            printf("密码保管箱\n");
            printf("-------------------------\n");
            printf("1. 添加密码记录\n");
            printf("2. 修改密码记录\n");
            printf("3. 删除密码记录\n");
            printf("4. 显示所有密码记录\n");
            printf("5. 按分类查询密码记录\n");
            printf("6. 根据关键字查询密码记录\n");
            printf("7. 退出\n");
            printf("-------------------------\n");
            printf("请选择操作: ");
            scanf("%d", &choice);
            getchar(); // 清空输入缓冲区
            
            switch (choice) {
                case 1:
                    verifyAction();
                    addRecord();
                    break;
                case 2:
                    verifyAction();
                    modifyRecord();
                    break;
                case 3:
                    verifyAction();
                    deleteRecord();
                    break;
                case 4:
                    verifyAction();
                    displayRecords();
                    break;
                case 5:
                    verifyAction();
                    searchByCategory();
                    break;
                case 6:
                    verifyAction();
                    searchByKeyword();
                    break;
                case 7:
                    printf("谢谢使用,再见!\n");
                    exit(0);
                default:
                    printf("无效的选项,请重新选择。\n");
                    break;
            }
        }
    } else {
        printf("身份验证失败,程序退出。\n");
        exit(0);
    }
    return 0;
}

// 用户身份验证
int login() {
    char username[100];
    char password[100];
    
    printf("欢迎使用密码保管箱,请先登录。\n");
    printf("用户名: ");
    scanf("%s", username);
    printf("密码: ");
    scanf("%s", password);
    
    // 进行用户名和密码的验证逻辑
    // ...

    return 1; // 返回1表示验证通过,返回0表示验证失败
}

// 加密密码
void encrypt(char *password) {
    // 实现密码加密逻辑
    // ...
}

// 解密密码
void decrypt(char *password) {
    // 实现密码解密逻辑
    // ...
}

// 添加密码记录
void addRecord() {
    PasswordRecord record;
    
    printf("请输入密码记录的网站名称(或app名称): ");
    scanf("%s", record.website);
    printf("请输入网址: ");
    scanf("%s", record.url);
    printf("请输入用户名: ");
    scanf("%s", record.username);
    printf("请输入密码: ");
    scanf("%s", record.password);
    printf("请输入手机号码: ");
    scanf("%s", record.phone);
    printf("请输入邮箱: ");
    scanf("%s", record.email);
    
    // 对重要字段进行加密存储
    encrypt(record.password);
    
    // 将密码记录写入文件
    FILE *file = fopen("passwords.dat", "ab");
    fwrite(&record, sizeof(PasswordRecord), 1, file);
    fclose(file);
    
    printf("密码记录已添加。\n");
}

// 修改密码记录
void modifyRecord() {
    // 实现密码记录修改逻辑
    // ...
}

// 删除密码记录
void deleteRecord() {
    // 实现密码记录删除逻辑
    // ...
}

// 显示所有密码记录
void displayRecords() {
    // 实现密码记录显示逻辑
    // ...
}

// 按分类查询密码记录
void searchByCategory() {
    // 实现按分类查询密码记录逻辑
    // ...
}

// 根据关键字查询密码记录
void searchByKeyword() {
    // 实现按关键字查询密码记录逻辑
    // ...
}

// 二次验证
void verifyAction() {
    char password[100];
    
    printf("请输入密码以进行验证: ");
    scanf("%s", password);
    
    // 进行密码验证逻辑
    // ...
}

控制台程序?

回答部分参考、引用ChatGpt以便为您提供更准确的答案:

以下是一种简单的C语言实现密码保管箱工具的基本思路和功能:

  1. 使用密码保管箱必须登录,验证使用者的身份才可继续,否则软件退出:

用户在启动密码保管箱工具时,需要输入正确的用户名和密码进行身份验证。如果身份验证失败,则程序退出;否则,进入密码保管箱主界面。

  1. 密码保管箱每条记录需提供网站名称(或app名称),网址,用户名,密码,手机号码,邮箱等相关信息,并对重要数据进行加密存储:

用户可以添加新的记录,每条记录包含网站名称、网址、用户名、密码、手机号码、邮箱等相关信息。对于重要的数据,例如密码,需要使用加密算法进行加密存储,以防止未经授权的访问。

  1. 提供添加、修改、删除功能,并按分类(网站或app)方式管理密码保管箱内的密码:

用户可以添加新的密码记录,并可以对已有的记录进行修改和删除操作。密码记录可以按照分类(网站或app)进行管理,方便用户进行查找和维护。

  1. 为了保障密码的安全性,密码保险箱存储密码的文件需要与程序放在不同的位置:

为了增加密码的安全性,密码保管箱存储密码的文件应该与程序文件放置在不同的位置,例如可以将密码文件存储在系统的特定目录下,或者使用加密文件系统进行保护。

  1. 可根据网站名称、网址等进行查询,也可根据密码分类(网站或app)进行显示:

用户可以根据网站名称、网址等关键词进行查询,以快速找到相应的密码记录。同时,可以按照分类(网站或app)的方式进行显示,便于用户进行管理和浏览。

  1. 查询、显示、删除等操作应进行二次验证才允许展示:

为了增加密码的安全性,涉及查询、显示和删除等敏感操作时,需要进行二次验证,例如再次输入密码或使用其他身份验证方式,以确保只有授权用户才能执行这些操作。

  1. 可记录密码的查询时间以及查询次数以供后续备查:

密码保管箱工具可以记录每次查询的时间和次数,方便用户进行后续的备查和记录。

这只是一个简单的密码保管箱工具的基本实现思路,实际开发中可能还需要考虑更多的安全性和用户体验方面的问题。同时,密码保管箱涉及用户隐私和密码安全等重要问题,因此在实际应用中需要进行严密的设计和测试,确保密码的安全性和用户信息的保密性。

img


需要找

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE 100

typedef struct {
    char website[MAX_SIZE];
    char url[MAX_SIZE];
    char username[MAX_SIZE];
    char password[MAX_SIZE];
    char phoneNumber[MAX_SIZE];
    char email[MAX_SIZE];
} PasswordEntry;

void login() {
    // 实现登录逻辑
    // 验证使用者的身份
    // 如果验证失败,退出程序
}

void encryptData(PasswordEntry* entry) {
    // 实现对敏感数据的加密
    // 可以使用加密算法,如AES
    // 将加密后的数据保存到文件中
}

void decryptData(PasswordEntry* entry) {
    // 实现对加密数据的解密
    // 可以使用解密算法,如AES
    // 将解密后的数据加载到内存中
}

void addEntry() {
    // 实现添加密码条目逻辑
    // 输入密码条目的各个字段信息
    // 调用encryptData函数加密保存
}

void modifyEntry() {
    // 实现修改密码条目逻辑
    // 输入要修改的密码条目的索引或其他标识符
    // 修改对应的字段信息
    // 调用encryptData函数加密保存
}

void deleteEntry() {
    // 实现删除密码条目逻辑
    // 输入要删除的密码条目的索引或其他标识符
    // 从文件中删除对应的条目
}

void displayEntries() {
    // 实现显示密码条目逻辑
    // 加载加密数据到内存中
    // 解密并显示条目的字段信息
    // 实现二次验证
}

void searchEntries() {
    // 实现查询密码条目逻辑
    // 输入查询关键字,如网站名称、网址等
    // 加载加密数据到内存中
    // 解密并显示符合查询条件的条目
    // 实现二次验证
}

void recordSearchTimeAndCount() {
    // 实现记录密码查询时间和次数逻辑
    // 在查询密码条目时调用该函数
    // 记录查询的时间和次数到文件中
}

int main() {
    login();

    while (1) {
        int choice;
        printf("\nPassword Safe\n");
        printf("1. Add Entry\n");
        printf("2. Modify Entry\n");
        printf("3. Delete Entry\n");
        printf("4. Display Entries\n");
        printf("5. Search Entries\n");
        printf("6. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                addEntry();
                break;
            case 2:
                modifyEntry();
                break;
            case 3:
                deleteEntry();
                break;
            case 4:
                displayEntries();
                break;
            case 5:
                searchEntries();
                break;
            case 6:
                printf("Exiting...\n");
                exit(0);
            default:
                printf("Invalid choice. Please try again.\n");
        }
    }

    return 0;
}

这是一款比较复杂的软件,需要仔细设计和开发实现。以下是该密码保管箱工具的大致设计思路:

  1. 身份验证。在访问密码保管箱前,需要用户进行身份验证,可以通过输入密码或者生物识别的方式进行验证,程序将会在验证成功后继续运行。

  2. 添加密码。用户可以输入网站名称(或app名称)、网址、用户名、密码、手机号、邮箱等信息添加密码,程序会对重要的数据进行加密并存储到文件中。

  3. 修改密码。用户可以通过程序提供的修改密码界面,进行修改密码操作,程序会检查输入信息是否符合原有的记录,并在修改完成后重新加密存储到文件中。

  4. 删除密码。用户可以通过程序提供的删除密码功能,对指定的密码记录进行删除,删除后程序会重新加密存储到文件中。

  5. 管理密码。程序需要提供按分类(网站或app)的方式来管理密码保管箱内的密码,可以展示所有的密码列表,也可以进行搜索操作。

  6. 密码文件存储。为了保障密码的安全性,密码保险箱存储密码的文件需要与程序放在不同的位置,并且需要进行加密,以防其他人直接通过打开存储文件的方式读取到所有密码。

  7. 操作验证。在查询、展示、删除等操作前,需要对操作进行二次验证,以保证数据安全。

  8. 操作记录。程序会记录密码的查询时间以及查询次数以供日后备查,以及验证操作的时间和行为。

这只是C语言密码保管箱工具的初步设计思路,要将其实现需要仔细考虑细节和安全性,还需要进行多种验证。需要足够的时间和经验才能完成。

我先给你个简易版:
gpt4的:


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <time.h>



// 定义密码保管箱结构体

typedef struct {

    char website[100]; // 网站名称或app名称

    char url[200]; // 网址

    char username[50]; // 用户名

    char password[100]; // 密码

    char phone[20]; // 手机号码

    char email[50]; // 邮箱

    int is_encrypted; // 是否加密存储,1表示加密,0表示未加密

} Password;



// 定义密码保管箱数组

Password passwords[100];

int password_count = 0;



// 登录验证函数

int login(char username[], char password[]) {

    int i;

    int flag = 0;

    FILE *fp = fopen("passwords.txt", "r");

    if (fp == NULL) {

        printf("无法打开文件!\n");

        return flag;

    }

    fclose(fp);

    fp = fopen("passwords.txt", "a+");

    if (fp == NULL) {

        printf("无法打开文件!\n");

        return flag;

    }

    fclose(fp);

    fp = fopen("passwords.txt", "w");

    if (fp == NULL) {

        printf("无法打开文件!\n");

        return flag;

    }

    fclose(fp);

    fp = fopen("passwords.txt", "r");

    for (i = 0; i < password_count; i++) {

        if (strcmp(username, passwords[i].username) == 0 && strcmp(password, passwords[i].password) == 0) {

            flag = 1; // 已登录成功,退出循环

            break;

        } else if (flag == 1) { // 如果已登录成功,则跳出循环,不再验证其他用户名和密码

            break;
        } else if (strcmp(username, passwords[i].username) != 0 || strcmp(password, passwords[i].password) != 0) {} // 如果用户名或密码不匹配,则继续验证下一个用户名和密码

    }

    fclose(fp);

    fp = fopen("passwords.txt", "w");

    fclose(fp);

    fprintf(stderr, "登录成功!\n"); // 在控制台输出登录成功的信息,方便调试和查看结果

    fprintf(stdout, "欢迎 %s!\n", username); // 在控制台输出欢迎信息,方便调试和查看结果

    fprintf(stdout, "请选择操作:1.添加密码\n"); // 在控制台输出添加密码的操作提示信息,方便调试和查看结果

    fprintf(stdout, "2.修改密码\n"); // 在控制台输出修改密码的操作提示信息,方便调试和查看结果

    fprintf(stdout, "3.删除密码\n"); // 在控制台输出删除密码的操作提示信息,方便调试和查看结果

    fprintf(stdout, "4.查询密码\n"); // 在控制台输出查询密码的操作提示信息,方便调试和查看结果

工作量很大啊