RC4加密解密C语言
时间: 2023-12-12 13:04:03 浏览: 33
以下是RC4加密解密的C语言代码示例:
```c
#include <stdio.h>
#include <string.h>
void swap(unsigned char *a, unsigned char *b) {
unsigned char temp = *a;
*a = *b;
*b = temp;
}
void rc4_init(unsigned char *key, int key_length, unsigned char *sbox) {
int i, j = 0;
unsigned char temp;
for (i = 0; i < 256; i++) {
sbox[i] = i;
}
for (i = 0; i < 256; i++) {
j = (j + sbox[i] + key[i % key_length]) % 256;
swap(&sbox[i], &sbox[j]);
}
}
void rc4_crypt(unsigned char *input, int input_length, unsigned char *output, unsigned char *sbox) {
int i = 0, j = 0, k, t;
unsigned char temp;
for (k = 0; k < input_length; k++) {
i = (i + 1) % 256;
j = (j + sbox[i]) % 256;
swap(&sbox[i], &sbox[j]);
t = (sbox[i] + sbox[j]) % 256;
output[k] = input[k] ^ sbox[t];
}
}
int main() {
unsigned char key[] = "this is a key";
unsigned char plaintext[] = "hello world";
unsigned char ciphertext[12];
unsigned char decrypted[12];
unsigned char sbox[256];
rc4_init(key, strlen(key), sbox);
rc4_crypt(plaintext, strlen(plaintext), ciphertext, sbox);
rc4_init(key, strlen(key), sbox);
rc4_crypt(ciphertext, strlen(plaintext), decrypted, sbox);
printf("Plaintext: %s\n", plaintext);
printf("Ciphertext: ");
for (int i = 0; i < strlen(plaintext); i++) {
printf("%02x", ciphertext[i]);
}
printf("\n");
printf("Decrypted: %s\n", decrypted);
return 0;
}
```