2021-11-02 RC4加密算法的原理与实现

一、实验题目

        RC4加密算法的原理与实现

二、实验目的:

  1. 理解流密码的基本思想
  2. 掌握RC4加密算法的加解密过程和实现方法

三、实验内容及步骤:

      1. 实验题目

           采用自己熟悉的编程语言实现RC4加解密算法

      2. 测试数据

          初始密钥:3 4 5

           明文:1 2 3 4 5 6

      3.实验结果

      4. 代码如下: 

扫描二维码关注公众号,回复: 13345705 查看本文章
#include<iostream>
using namespace std;

typedef struct {								 //定义数组结构体 
	int len;
	int ch[256];	
}String;

void output(String &S)
{//输出数据 
	for(int i=0; i<S.len; i++)
		cout<<S.ch[i]<<" ";
	cout<<endl; 
}
void intput(String &S)
{//输入数据 
	char c;
	S.len = 0;
	while((cin>>S.ch[S.len++]).get(c))			 //将输入的数据存入数组S中,并判断字符c 
		if (c == '\n') break;					 //c为回车键时结束 
}
void swap(int &m,int &n)
{//数值交换 
	int temp;
	temp = m;m = n;n = temp;
}
void get_S(String &S)
{//获取S(状态向量) 
	S.len = 256; 
	for(int i=0; i<S.len; i++)
		S.ch[i] = i;	
}
void get_D(String &D)
{//获取D(明文) 
	cout<<"请输入明文:"<<endl;
	intput(D);
}
void displace(String &S,String &T)
{//置换S盒 
	for(int i=0,j=0; i<S.len; i++){
		j = (j+S.ch[i]+T.ch[i]) % S.len;
		swap(S.ch[i],S.ch[j]);
	}
}
void get_T(String &S,String &T)
{//获取T (生成密钥流的种子) 
	cout<<"请输入初始密钥:"<<endl;
	intput(T);									 //初始密钥 
	for(int j=T.len; j<S.len; j++)				 //初始密钥小于256时,进行轮转
		T.ch[j] = T.ch[j%T.len]; 
	T.len = S.len; 								 //T的长度等于S的长度 
	displace(S,T);	   							 //置换S盒
}
void encryption(String &S,String &D,String &K)
{//密钥流的生成与加密 
	cout<<"加密得密文:"<<endl; 
	K.len = 0;
	for(int i=0,j=0,t; K.len<D.len; K.len++) {
		i = (i+1) % S.len;
		j = (j+S.ch[i]) % S.len;
		swap(S.ch[i],S.ch[j]);
		t = (S.ch[i]+S.ch[j]) % S.len;		 
		K.ch[K.len] = S.ch[t]; 					 //生成密钥流 K  
		D.ch[K.len] = D.ch[K.len] ^ K.ch[K.len]; //加密明文 
	}
	output(D);									 //输出密文 
	cout<<"密钥流:"<<endl;
	output(K);									 //输出密钥流 
}
void decrypt(String &D,String &K)
{//解密密文 
	cout<<"解密得明文:"<<endl;	
	for(int i=0 ; i<D.len; i++)
		D.ch[i] = D.ch[i] ^ K.ch[i];			 //使用密钥流 K进行解密 
	output(D);									 //输出明文 
} 

int main()
{
	String S,T,K,D;		//状态向量S,临时向量T,密钥流K,明文D
	get_S(S);			//初始化S
	get_T(S,T);			//输入初始密钥
	get_D(D);			//输入明文
	encryption(S,D,K);	//加密明文	
	decrypt(D,K);		//解密密文	
	return 0;
}

四、实验总结:

      1. RC4算法的原理:

        (1)生成S盒(长度为256)

        (2)利用S盒生成密钥流

        (3)利用密钥流加密明文

      2. RC4加密的原理:

        (1)初始化S(长度为256)

        (2)用户输入初始密钥(长度任意),初始密钥小于256,轮转密钥得到长度为256的密钥

        (3)置换S(用于打乱初始种子)

        (4)密钥流的生成与明文的加密

        (5)使用生成的密钥流进行解密

本文章仅供学习和参考!

欢迎交流~

猜你喜欢

转载自blog.csdn.net/m0_58489132/article/details/121107742