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

📄 rc4.cpp

📁 本程序实现RC4算法
💻 CPP
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>

void swap(int *array,int i,int j)       //swap函数实现Sbox[i]与Sbox[j]的交换
{
    int temp;
	temp= array[i];
    array[i] = array[j];
    array[j] = temp;
}

char *endecrypt(const char *text, int textlen, const char *pkey)        //加密解密函数
{
    char *cipher;                       
    int a,b,k,i=0,j=0;                  
    int len;                            
    int Sbox[256];                      
    int Key[256];                      

    len = strlen(pkey);

    for(a=0;a<256;a++)
    {
        Key[a]=pkey[a%len];
        Sbox[a]=a;
    }

    for(a=0,b=0;a<256;a++)
    {
        b=(b+Sbox[a]+Key[a])%256;
        swap(Sbox,a,b);
    }

    cipher=(char *)malloc(textlen);

    for(a=0;a<textlen;a++)
    {
        i=(i+1)%256;
        j=(j+Sbox[i])%256;
        swap(Sbox,i,j);
        k=Sbox[(Sbox[i]+Sbox[j])%256];
        cipher[a] = text[a]^k;
    }
    return cipher;
}

void main()
{
    char buf[256],pw[16],*pen,*pde,*pch;
    int x,len;

	printf("**********RC4加密算法**********\n\n");
	for(;;)
	{
		printf("请输入加密字符:\n");
		fgets(buf,sizeof(buf),stdin);
		for (x=strlen(buf)-1;(x>= 0)&&(buf[x]==10);x--)
			buf[x] = 0;
		if(!buf[0])
			break;

		printf("请输入密钥:\n");    
		fgets(pw,sizeof(pw),stdin);
		for (x=strlen(pw)-1;(x>= 0)&&(pw[x]==10);x--)
			pw[x] = 0;
		if(!pw[0])
			break;

		len=strlen(buf);
		pen=endecrypt(buf,len,pw);
	
		printf("密文的十六进制表示:");
		for (pch=pen,x=0;x<len;pch++,x++)
		{
			if(!(x%20))
				printf("\n");
			printf("%.2x",(unsigned char)*pch);
		}
	
		pde=endecrypt(pen,len,pw);
		pde[len] = 0;
		printf("\n解密后得到的明文:\n%s", pde);
		printf("\n");
		free(pen);
		free(pde);
	}
}

⌨️ 快捷键说明

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