移位加解密
#include <stdio.h>
// 移位加密函数
void encryptFile(const char* inputPath, const char* outputPath, int key) {
FILE* inputFile = fopen(inputPath, "rb");
FILE* outputFile = fopen(outputPath, "wb");
char buffer[1024]; // 定义一个缓冲区用于读取和写入数据块
size_t bytesRead;
while (1) {
bytesRead = fread(buffer, sizeof(char), sizeof(buffer), inputFile);
if (bytesRead <= 0) {
break; // 读取结束或发生错误
}
size_t i;
for (i = 0; i < bytesRead; i++) {
buffer[i] = buffer[i] + key; // 使用加法进行移位加密
if (buffer[i] > 127) { // 处理溢出情况,确保仍在ASCII码范围内
buffer[i] = buffer[i] - 128;
}
}
fwrite(buffer, sizeof(char), bytesRead, outputFile); // 将加密后的数据块写入输出文件
}
fclose(inputFile);
fclose(outputFile);
}
// 移位解密函数
void decryptFile(const char* inputPath, const char* outputPath, int key) {
encryptFile(inputPath, outputPath, -key); // 解密与加密使用相同的操作,但使用负的移位数
}
int main() {
const char* inputFilePath = "input.txt";
const char* encryptedFilePath = "encrypted.txt";
const char* decryptedFilePath = "decrypted.txt";
int shiftKey = 200; // 移位加密所使用的密钥
// 加密文件
encryptFile(inputFilePath, encryptedFilePath, shiftKey);
// 解密文件
decryptFile(encryptedFilePath, decryptedFilePath, shiftKey);
return 0;
}
异或加解密
#include <stdio.h>
#include <string.h>
void encryptDecrypt(char *str, char key) {
int i;
for (i = 0; str[i] != '\0'; i++) {
str[i] ^= key; // 对每个字符进行异或操作
}
}
int main() {
char originalStr[] = "¥%abc&def&ghi%……&jkl";
char encryptedStr[100];
char decryptedStr[100];
char key = 0x5A; // 密钥,可以是任意值
// 复制原始字符串以便加密
strcpy(encryptedStr, originalStr);
// 加密
encryptDecrypt(encryptedStr, key);
printf("加密后的字符串: %s\n", encryptedStr);
// 复制加密后的字符串以便解密
strcpy(decryptedStr, encryptedStr);
// 解密
encryptDecrypt(decryptedStr, key);
printf("解密后的字符串: %s\n", decryptedStr);
return 0;
}