rc4密码算法c语言代码
时间: 2023-07-26 14:10:07 浏览: 39
以下是 RC4 密码算法的 C 语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define KEYLEN 256
void swap(unsigned char *a, unsigned char *b)
{
unsigned char temp = *a;
*a = *b;
*b = temp;
}
void rc4(unsigned char *key, unsigned char *plain, int len)
{
unsigned char s[KEYLEN];
int i, j, k;
for (i = 0; i < KEYLEN; i++) {
s[i] = i;
}
for (i = j = 0; i < KEYLEN; i++) {
j = (j + s[i] + key[i % strlen(key)]) % KEYLEN;
swap(&s[i], &s[j]);
}
i = j = 0;
for (k = 0; k < len; k++) {
i = (i + 1) % KEYLEN;
j = (j + s[i]) % KEYLEN;
swap(&s[i], &s[j]);
plain[k] ^= s[(s[i] + s[j]) % KEYLEN];
}
}
int main()
{
unsigned char key[] = "secret key"; // 密钥
unsigned char plain[] = "Hello World!"; // 明文
int len = strlen(plain);
printf("Plaintext: %s\n", plain);
// 加密
rc4(key, plain, len);
printf("Ciphertext: ");
for (int i = 0; i < len; i++) {
printf("%02X ", plain[i]);
}
printf("\n");
// 解密
rc4(key, plain, len);
printf("Decrypted plaintext: %s\n", plain);
return 0;
}
```
这里使用了一个长度为 256 的数组 s 来存储加密算法中需要用到的字节序列。其中,swap 函数用于交换两个字节的位置。在 rc4 函数中,首先根据秘钥 key 生成 s 数组,然后使用 s 数组对明文 plain 进行加密/解密。最后,通过循环输出的方式,将加密后的密文以十六进制的格式输出。