1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
//rc4.cpp
#include "rc4.h"
RC4::RC4()
{
x = 0;
y = 0;
}
// 初始化算法
void RC4::rc4_init(unsigned char *key, unsigned long Len)
{
for (int i = 0; i < 256 ; i++) {
sbox[i] = i;
}
int j = 0;
unsigned char tmp;
for (int i = 0; i < 256; i++)
{
j = ( j + sbox[i] + key[i % Len] ) % 256;
tmp = sbox[i];
sbox[i] = sbox[j];
sbox[j] = tmp;
}
}
void RC4::encrypt(unsigned char *Data, unsigned long Len)
{
for(unsigned long k = 0 ; k < Len ; k++)
{
x = (x + 1) % 256;
y = (y + sbox[x] ) % 256;
std::swap(sbox[x],sbox[y]);
int r = ( sbox[x] + sbox[y] ) % 256;
Data[k] ^= sbox[r];
}
}
void RC4::clear()
{
x = y = 0;
}
int main()
{
/*unsigned char data[18] ="This is plaintext",key[4] = "Key";
RC4 demo;
demo.rc4_init(key,3);
demo.do_crypt(data,17);
printf("%x\n", data);*/
unsigned char data[17] = {191, 247, 30, 242, 151, 93, 185, 82, 215, 117, 43, 65, 9, 194, 39, 237, 121};
unsigned char key[3] = {0x4b, 0x65, 0x79};
RC4 dem0;
dem0.rc4_init(key, 3);
dem0.encrypt(data, 17);
printf("%s\n", data);
return 0;
}
|