基本信息
源码名称:RC4加解密算法
源码大小:4.83KB
文件格式:.cpp
开发语言:C/C++
更新时间:2014-02-19
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
利用RC4算法实现文件的加解密

/*初始化S盒*/  
void InitSbox(unsigned char sbox[]){  
    for(int i = 0; i < 256; i )  sbox[i] = i;  
}  
  
/*密钥填充256数组*/  
void KeyExpansion(unsigned char key[], char *k, int len){  
    if(len <= 256){  
        for(int i = 0; i < 256; i ) key[i] = k[i % len];  
    }  
    if(len > 256){  
        for(int i = 0; i < 256; i ) key[i] = k[i];  
    }  
}  
  
/*打乱S盒*/   
void UpsetSbox(unsigned char sbox[], unsigned char key[]){  
    int j = 0;  
    unsigned char temp;  
    int n;  
    for(int i = 0; i < 256; i ){  
        n = j (int)sbox[i] (int)key[i];  
        j = n % 256;  
        temp = sbox[i];  
        sbox[i] = sbox[j];  
        sbox[j] = temp;  
    }  
}  
  
/*加解密数据*/   
void DataProcess(unsigned char sbox[], FILE *fp1, FILE *fp2){  
    int i, j;  
    i = 0; j = 0;  
    char ch = fgetc(fp1);  
    while(ch != EOF){  
        i = (i 1) % 256;  
        int temp2 = j (int)sbox[i];  
        j = temp2 % 256;  
        unsigned char temp;  
        temp = sbox[i];  
        sbox[i] = sbox[j];  
        sbox[j] = temp;  
        int temp1 = (int)sbox[i] (int)sbox[j];  
        int t = temp1 % 256;  
        char k = sbox[t];  
        char cipherchar = ch ^ k;  
        fputc(cipherchar, fp2);  
        ch = fgetc(fp1);  
    }  
}  
  
/*加密总函数*/  
void DataEncrypt(char *k, unsigned char *key, unsigned char *sbox, FILE *fp1, FILE *fp2) {  
    int len = strlen(k);  
    KeyExpansion(key, k, len);  
    InitSbox(sbox);  
    UpsetSbox(sbox, key);  
    DataProcess(sbox, fp1, fp2);  
    fclose(fp1);  
    fclose(fp2);  
    printf("\n加密成功!\n\n");  
}  
  
/*解密总函数*/   
void DataDecrypt(char *k1, unsigned char *key, unsigned char *sbox, FILE *fp1, FILE *fp2) {  
    int len = strlen(k1);  
    KeyExpansion(key, k1, len);  
    InitSbox(sbox);  
    UpsetSbox(sbox, key);  
    DataProcess(sbox, fp1, fp2);  
    fclose(fp1);  
    fclose(fp2);  
    printf("\n解密成功!\n\n");  
}