在数字化时代,我们每天都需要登录各种账户,如邮箱、社交媒体、在线银行等。记住所有的密码无疑是一项挑战。为了解决这个问题,我们可以利用C语言编程,实现一个简单的密码存储功能。下面,我将详细讲解如何使用C语言编写一个记住密码的程序。
1. 程序设计思路
首先,我们需要明确程序的功能:
- 存储密码:程序应能够将用户输入的密码保存到本地文件中。
- 查询密码:程序应能够根据用户提供的用户名,从文件中查询并显示对应的密码。
- 安全性:密码存储时需要进行加密处理,确保密码安全。
2. 环境配置
在开始编程之前,请确保您的电脑已安装以下软件:
- C语言编译器(如GCC)
- 文本编辑器(如Notepad++)
3. 编程实现
以下是一个简单的C语言程序,用于实现记住密码功能:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/sha.h>
#define PASSWORD_FILE "passwords.txt"
// 加密密码
char* encrypt_password(const char* password) {
unsigned char hash[SHA256_DIGEST_LENGTH];
char* encrypted_password = malloc(SHA256_DIGEST_LENGTH * 2 + 1);
if (encrypted_password == NULL) {
return NULL;
}
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, password, strlen(password));
SHA256_Final(hash, &sha256);
for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
sprintf(encrypted_password + (i * 2), "%02x", hash[i]);
}
encrypted_password[SHA256_DIGEST_LENGTH * 2] = '\0';
return encrypted_password;
}
// 存储密码
void store_password(const char* username, const char* password) {
FILE* file = fopen(PASSWORD_FILE, "a");
if (file == NULL) {
printf("Error opening file!\n");
return;
}
char* encrypted_password = encrypt_password(password);
if (encrypted_password == NULL) {
printf("Error encrypting password!\n");
fclose(file);
return;
}
fprintf(file, "%s %s\n", username, encrypted_password);
free(encrypted_password);
fclose(file);
}
// 查询密码
void query_password(const char* username) {
FILE* file = fopen(PASSWORD_FILE, "r");
if (file == NULL) {
printf("Error opening file!\n");
return;
}
char line[256];
while (fgets(line, sizeof(line), file)) {
char* token = strtok(line, " ");
if (strcmp(token, username) == 0) {
char* encrypted_password = strtok(NULL, " ");
printf("Password for %s: %s\n", username, encrypted_password);
break;
}
}
fclose(file);
}
int main() {
char username[50];
char password[50];
printf("Enter username: ");
scanf("%s", username);
printf("Enter password: ");
scanf("%s", password);
store_password(username, password);
printf("Password for %s stored successfully!\n", username);
printf("Do you want to query a password? (y/n): ");
char choice;
scanf(" %c", &choice);
if (choice == 'y' || choice == 'Y') {
printf("Enter username to query: ");
scanf("%s", username);
query_password(username);
}
return 0;
}
4. 程序说明
encrypt_password函数使用SHA-256算法对密码进行加密。store_password函数将用户名和加密后的密码保存到passwords.txt文件中。query_password函数根据用户名从文件中查询并显示对应的密码。
5. 使用方法
- 将上述代码保存为
password_manager.c文件。 - 打开终端,进入代码所在的目录。
- 编译代码:
gcc password_manager.c -o password_manager -lcrypto - 运行程序:
./password_manager
现在,您可以使用这个程序轻松存储和查询密码了。请注意,为了确保安全性,请将passwords.txt文件保存在安全的地方,并定期更新密码。
