好的,我会给你一个完整的程序,它能够加密和解密文件内容。以下是该程序的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
void encryptDecrypt(char *p, int ret, int operation) {
// 根据操作类型进行加密或解密
for (int i = 0; i < ret; i++) {
if (operation == 1) {
// 加密
*(p + i) = *(p + i) + 1;
} else if (operation == -1) {
// 解密
*(p + i) = *(p + i) - 1;
}
}
}
int main(int argc, char *argv[]) {
if (argc != 4) {
fprintf(stderr, "使用方法:%s <+/-加密/解密> <输入文件> <输出文件>\n", argv[0]);
return -1;
}
int fd_in = open(argv[2], O_RDONLY);
if (fd_in < 0) {
perror("open");
return -1;
}
int fd_out = open(argv[3], O_WRONLY | O_CREAT | O_TRUNC, 0666);
if (fd_out < 0) {
perror("open");
return -1;
}
char buf[32] = {0};
ssize_t ret;
while ((ret = read(fd_in, buf, sizeof(buf))) > 0) {
// 根据命令选择加密或解密
if (strcmp(argv[1], "+") == 0) {
encryptDecrypt(buf, ret, 1);
} else if (strcmp(argv[1], "-") == 0) {
encryptDecrypt(buf, ret, -1);
} else {
fprintf(stderr, "无效的命令:%s\n", argv[1]);
return -1;
}
// 写入到输出文件
if (write(fd_out, buf, ret) != ret) {
perror("write");
return -1;
}
memset(buf, 0, sizeof(buf)); // 清空缓冲区以备下一次读取
}
if (ret < 0) {
perror("read");
return -1;
}
close(fd_in);
close(fd_out);
printf("%s完成\n", strcmp(argv[1], "+") == 0 ? "加密" : "解密");
return 0;
}
你可以通过在命令行中传递 +
或 -
来选择加密或解密,然后提供输入文件名和输出文件名。例如:
./program + input.txt output.txt // 加密 input.txt 的内容并保存到 output.txt
./program - output.txt decrypted.txt // 解密 output.txt 的内容并保存到 decrypted.txt
这个程序会将输入文件的内容加密或解密,并将结果写入到输出文件中。