c语言实现将文件加密后从服务器发向客户端
时间: 2023-10-05 09:07:37 浏览: 45
首先,我们需要在服务器端使用C语言打开要加密的文件,读取文件内容并进行加密,然后将加密后的内容发送给客户端。客户端则接收加密后的文件内容并进行解密操作。
以下是一个简单的示例代码:
**服务器端代码:**
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 加密函数
void encrypt(char *input, char *output, int key) {
int len = strlen(input);
for (int i = 0; i < len; i++) {
output[i] = input[i] ^ key; // 异或运算实现加密
}
}
int main() {
char *filename = "test.txt"; // 待加密的文件名
int key = 10; // 加密密钥
FILE *fp = fopen(filename, "rb"); // 以二进制格式打开文件
if (fp == NULL) {
printf("Failed to open file: %s\n", filename);
return -1;
}
// 获取文件大小
fseek(fp, 0L, SEEK_END);
int filesize = ftell(fp);
rewind(fp);
char *buffer = (char*) malloc(filesize * sizeof(char)); // 分配缓冲区内存
fread(buffer, sizeof(char), filesize, fp); // 读取文件内容
fclose(fp);
char *encrypted = (char*) malloc(filesize * sizeof(char)); // 分配加密后的内存
encrypt(buffer, encrypted, key); // 加密
// 假设客户端已经连接上服务器并通过 socket 发送加密后的文件内容
// 这里省略 socket 相关代码
free(buffer);
free(encrypted);
return 0;
}
```
**客户端代码:**
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 解密函数
void decrypt(char *input, char *output, int key) {
int len = strlen(input);
for (int i = 0; i < len; i++) {
output[i] = input[i] ^ key; // 异或运算实现解密
}
}
int main() {
// 假设客户端已经通过 socket 接收到加密后的文件内容
// 这里省略 socket 相关代码
int key = 10; // 加密密钥
char *encrypted = "encrypted content"; // 接收到的加密后的文件内容
int filesize = strlen(encrypted); // 获取文件大小
char *decrypted = (char*) malloc(filesize * sizeof(char)); // 分配解密后的内存
decrypt(encrypted, decrypted, key); // 解密
// 将解密后的文件内容写入文件
FILE *fp = fopen("test_decrypted.txt", "wb");
if (fp == NULL) {
printf("Failed to open file: %s\n", "test_decrypted.txt");
return -1;
}
fwrite(decrypted, sizeof(char), filesize, fp);
fclose(fp);
free(decrypted);
return 0;
}
```
需要注意的是,这只是一个简单的示例代码,实际中还需要考虑一些其他的问题,比如加密算法的安全性、文件大小超过缓冲区大小的处理等。