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

📄 rc4.cpp

📁 采用c++实现的文件加密程序
💻 CPP
字号:
#include "stdafx.h"
#include "rc4.h"
#include "stdafx.h"
#include <wincrypt.h>
#include "malloc.h"

#define BUFFER_SIZE 256

static void swap_byte(unsigned char *a, unsigned char *b);

void prepare_key(unsigned char *key_data_ptr, int key_data_len, rc4_key *key)
{
    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 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;
}

static void swap_byte(unsigned char *a, unsigned char *b)
{
    unsigned char swapByte; 
    
    swapByte = *a; 
    *a = *b;      
    *b = swapByte;
}

void write_file(const char * filename, unsigned char * data, long length)
{
	FILE * fp = fopen(filename, "w+");
	if (fp) {
		fwrite(data, 1, length, fp);
		fclose(fp);
	}
}

int verify_complexity(const char * data)
{
	return -1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -