Voor een uitleg over RC4, zie Wikipedia: RC4
Ik probeer het RC4-algoritme te implementeren in C++. Aangezien het algoritme vrij simpel is kan ik hier de gehele code wel posten:
Voorzover ik weet is dit gewoon een letterlijke implementatie van het algoritme zoals het op wikipedia staat. Ik gebruik ook geen pointers o.i.d., de code is straightforward. Toch levert dit niet dezelfde resultaten op als de voorbeelden op wikipedia. Heeft er iemand enig idee wat er fout is aan mijn implementatie? Ik ben al dagen aan het prutsen maar kom er niet uit ..
Ik probeer het RC4-algoritme te implementeren in C++. Aangezien het algoritme vrij simpel is kan ik hier de gehele code wel posten:
C++:
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
| #include <iostream> #include <string> #include <vector> class RC4 { public: RC4(std::string key) : x(0), y(0) { s.reserve(256); for (unsigned int i = 0; i < 256; i++) { s.push_back(i); } unsigned int j = 0; for (unsigned int i = 0; i < 256; i++) { j = (j + s[i] + key[i % key.size()]) % 256; swap(i, j); } } unsigned int getKeystreamByte() { x = (x + 1) % 256; y = (y + s[x]) % 256; swap(x, y); return s[(s[x] + s[y]) % 256]; } private: void swap(unsigned int i, unsigned int j) { unsigned int temp = s[i]; s[i] = s[j]; s[j] = temp; } std::vector<unsigned int> s; unsigned int x,y; }; int main() { unsigned char c; RC4 rc4("2008"); while (std::cin.good()) { std::cin >> c; c = c ^ rc4.getKeystreamByte(); std::cout << c; } return 0; } |
Voorzover ik weet is dit gewoon een letterlijke implementatie van het algoritme zoals het op wikipedia staat. Ik gebruik ook geen pointers o.i.d., de code is straightforward. Toch levert dit niet dezelfde resultaten op als de voorbeelden op wikipedia. Heeft er iemand enig idee wat er fout is aan mijn implementatie? Ik ben al dagen aan het prutsen maar kom er niet uit ..
Onvoorstelbaar!