rc4 c语言 实现文件加解密
时间: 2023-11-28 22:04:10 浏览: 137
以下是一个简单的 RC4 加解密实现示例,你可以根据自己的需求进行修改和扩展。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* RC4加解密函数 */
void rc4(unsigned char *text, int len, unsigned char *key, int keylen)
{
unsigned char s[256];
int i, j = 0, k = 0, t;
/* 初始化S数组 */
for (i = 0; i < 256; i++)
s[i] = i;
/* 根据key打乱S数组 */
for (i = 0; i < 256; i++) {
j = (j + s[i] + key[i % keylen]) % 256;
t = s[i];
s[i] = s[j];
s[j] = t;
}
/* RC4加解密 */
for (i = 0; i < len; i++) {
k = (k + 1) % 256;
j = (j + s[k]) % 256;
t = s[k];
s[k] = s[j];
s[j] = t;
text[i] ^= s[(s[k] + s[j]) % 256];
}
}
/* 文件加解密函数 */
void file_rc4(char *infile, char *outfile, char *key)
{
FILE *fpin, *fpout;
unsigned char buffer[4096];
int len, keylen = strlen(key);
/* 打开输入文件和输出文件 */
fpin = fopen(infile, "rb");
if (fpin == NULL) {
printf("Cannot open input file.\n");
exit(1);
}
fpout = fopen(outfile, "wb");
if (fpout == NULL) {
printf("Cannot open output file.\n");
exit(1);
}
/* 读取输入文件并加密/解密 */
while ((len = fread(buffer, 1, 4096, fpin)) > 0) {
rc4(buffer, len, key, keylen);
fwrite(buffer, 1, len, fpout);
}
/* 关闭文件 */
fclose(fpin);
fclose(fpout);
}
int main(int argc, char *argv[])
{
/* 检查命令行参数 */
if (argc != 4) {
printf("Usage: %s [input file] [output file] [key]\n", argv[0]);
exit(1);
}
/* 加密/解密文件 */
file_rc4(argv[1], argv[2], argv[3]);
return 0;
}
```
使用方法:
1. 编译代码:`gcc rc4.c -o rc4`
2. 加密文件:`./rc4 input.txt output.txt mykey`
3. 解密文件:`./rc4 output.txt input.txt mykey`
其中,`input.txt` 是要加密/解密的文件名,`output.txt` 是输出文件名,`mykey` 是加密/解密密钥。
阅读全文