⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rc4.c

📁 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 + -