rc4加解密算法 c++
时间: 2023-11-30 17:42:42 浏览: 31
以下是RC4加解密算法的C++实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
void rc4_init(unsigned char* key_data_ptr, unsigned int key_data_len, unsigned char* key, unsigned int key_len)
{
unsigned char t; unsigned char index1;
unsigned char index2;
unsigned char* state;
short counter;
state = new unsigned char[256];
for (counter = 0; counter < 256; counter++)
state[counter] = counter;
index1 = 0;
index2 = 0;
for (counter = 0; counter < 256; counter++)
{
index2 = (key_data_ptr[index1] + state[counter] + index2) % 256;
swap(state[counter], state[index2]);
index1 = (index1 + 1) % key_data_len; }
counter = 0;
index1 = 0;
index2 = 0;
for (int i = 0; i < key_len; i++)
{
counter = (counter + 1) % 256;
index1 = (index1 + state[counter]) % 256;
index2 = (state[counter] + index2) % 256;
swap(state[counter], state[index1]); key[i] = state[(state[counter] + state[index1]) % 256];
}
delete[] state;
}
void rc4_crypt(unsigned char* data, unsigned int data_len, unsigned char* key, unsigned int key_len)
{
unsigned char t;
unsigned char index1;
unsigned char index2;
unsigned char* state;
short counter;
state = new unsigned char[256];
for (counter = 0; counter < 256; counter++)
state[counter] = counter;
index1 = 0;
index2 = 0;
for (counter = 0; counter < data_len; counter++)
{
index1 = (index1 + 1) % 256;
index2 = (key[index1] + index2) % 256;
swap(state[index1], state[index2]);
t = (state[index1] + state[index2]) % 256;
data[counter] ^= state[t];
}
delete[] state;
}
int main()
{
unsigned char key_data[] = "123456";
unsigned char data[] = "hello world";
unsigned char key[256];
unsigned int key_len = strlen((char*)key_data);
unsigned int data_len = strlen((char*)data);
rc4_init(key_data, key_len, key, key_len);
rc4_crypt(data, data_len, key, key_len);
cout << "加密后的数据:" << data << endl;
rc4_init(key_data, key_len, key, key_len);
rc4_crypt(data, data_len, key, key_len);
cout << "解密后的数据:" << data << endl;
return 0;
}
```