利用指针实现文件加解密
时间: 2023-12-14 08:57:59 浏览: 26
文件加解密可以使用加密算法(如AES、DES等)对文件内容进行加密和解密。下面是一个基于C语言指针的简单示例,使用异或运算对文件内容进行加密和解密:
```c
#include <stdio.h>
// 加密函数
void encrypt(char *ptr, int size, char key) {
for (int i = 0; i < size; i++) {
*(ptr + i) ^= key;
}
}
// 解密函数
void decrypt(char *ptr, int size, char key) {
for (int i = 0; i < size; i++) {
*(ptr + i) ^= key;
}
}
int main() {
char key = 'A'; // 加密密钥
char file_name[] = "test.txt"; // 待加密的文件名
// 读取文件
FILE *fp = fopen(file_name, "rb");
if (fp == NULL) {
printf("文件不存在或无法打开!\n");
return 1;
}
fseek(fp, 0, SEEK_END);
int size = ftell(fp);
fseek(fp, 0, SEEK_SET);
char *buffer = (char *)malloc(size);
fread(buffer, size, 1, fp);
fclose(fp);
// 加密文件
encrypt(buffer, size, key);
// 写入加密后的文件
char encrypted_file_name[] = "test_encrypted.txt";
fp = fopen(encrypted_file_name, "wb");
fwrite(buffer, size, 1, fp);
fclose(fp);
// 读取加密后的文件
fp = fopen(encrypted_file_name, "rb");
if (fp == NULL) {
printf("文件不存在或无法打开!\n");
return 1;
}
fseek(fp, 0, SEEK_END);
size = ftell(fp);
fseek(fp, 0, SEEK_SET);
buffer = (char *)malloc(size);
fread(buffer, size, 1, fp);
fclose(fp);
// 解密文件
decrypt(buffer, size, key);
// 写入解密后的文件
char decrypted_file_name[] = "test_decrypted.txt";
fp = fopen(decrypted_file_name, "wb");
fwrite(buffer, size, 1, fp);
fclose(fp);
printf("加解密操作成功!\n");
return 0;
}
```
在该示例中,首先读取待加密的文件内容并存储在内存中,然后通过调用encrypt函数对文件内容进行加密。加密后的内容写入到新的文件中。接着,程序读取刚才写入的加密后的文件,并通过调用decrypt函数对文件内容进行解密。解密后的内容同样写入到新的文件中。最终输出“加解密操作成功!”表示加解密操作已经完成。