?? rc4.c
字號:
#include <stdio.h>#define buf_size 1024typedef struct rc4_key{ unsigned char state[256]; unsigned char x; unsigned char y;} rc4_key;#define swap_byte(x,y) t = *(x); *(x) = *(y); *(y) = tvoid prepare_key(unsigned char *key_data_ptr, int key_data_len, rc4_key *key){ int i; unsigned char t; unsigned char swapByte; unsigned char index1; unsigned char index2; unsigned char* state; short counter; state = &key->state[0]; for(counter = 0; counter < 256; counter++) state[counter] = counter; key->x = 0; key->y = 0; index1 = 0; index2 = 0; for(counter = 0; counter < 256; counter++) { index2 = (key_data_ptr[index1] + state[counter] + index2) % 256; swap_byte(&state[counter], &state[index2]); index1 = (index1 + 1) % key_data_len; }}void rc4(unsigned char *buffer_ptr, int buffer_len, rc4_key *key){ unsigned char t; unsigned char x; unsigned char y; unsigned char* state; unsigned char xorIndex; short counter; x = key->x; y = key->y; state = &key->state[0]; for(counter = 0; counter < buffer_len; counter++) { x = (x + 1) % 256; y = (state[x] + y) % 256; swap_byte(&state[x], &state[y]); xorIndex = (state[x] + state[y]) % 256; buffer_ptr[counter] ^= state[xorIndex]; } key->x = x; key->y = y;}int main(int argc, char* argv[]){ char seed[256]; char data[512]; char buf[buf_size]; char digit[5]; int hex, rd,i; int n; rc4_key key; if (argc < 2) { fprintf(stderr,"%s key <in >out\n",argv[0]); exit(1); } strcpy(data,argv[1]); n = strlen(data); if (n&1) { strcat(data,"0"); n++; } n/=2; strcpy(digit,"AA"); for (i=0;i<n;i++) { digit[2] = data[i*2]; digit[3] = data[i*2+1]; sscanf(digit,"%x",&hex); seed[i] = hex; } prepare_key(seed,n,&key); rd = fread(buf,1,buf_size,stdin); while (rd>0) { rc4(buf,rd,&key); fwrite(buf,1,rd,stdout); rd = fread(buf,1,buf_size,stdin); }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -