-
-
[求助]这个RC4哪里不对?
-
发表于:
2011-12-3 19:44
4727
-
void swap(unsigned char& a, unsigned char& b) {
unsigned char x = a;
a = b;
b = x;
}
void key_gen(unsigned char* s, unsigned char* key, int key_len) {
int i=0, j=0;
for(i=0; i<256; i++) s[i] = i;
for(i=0; i<256; i++) {
j = (j + s[i] + key[i%key_len]) %256;
swap(s[i], s[j]);
}
}
void rc4(unsigned char* s, unsigned char* data, int data_len) {
int i=0, j=0, c=0;
unsigned k;
for(c=0; c<data_len; c++) {
i = (i+1)%256;
j = (j +s[i])%256;
swap(s[i], s[j]);
k = s[(s[i] + s[j]) % 256];
data[c] ^= k;
}
}
// void dump(unsigned char* x, int len) {
// for(int i=0; i<len; i++) {
// if(i%16==0) printf("\n%02X\t", i);
// printf("%02X ", x[i]);
// }
// printf("\n");
// }
int main() {
unsigned char text[256] = {"Plaintext"};
unsigned char key[256] = {"Key"};
unsigned char sbox[256] = {0};
key_gen(sbox, key, strlen((char*)key));// RC4 init
// dump(sbox, 256);
rc4(sbox, text, strlen((char*)text));
cout << text << endl;
rc4(sbox, text, strlen((char*)text));
cout << text << endl;
return 0;
}
网上搜索了几个算法,都是不对的。。以上代码是参考搜索结果和 http://en.wikipedia.org/wiki/RC4 这篇文章里的伪代码做的,请问哪里不对?为什么加密/解密后就不是 "Plaintext" 了?
[课程]Android-CTF解题方法汇总!