RC4加密算法简述

本文详细介绍了RC4加密算法的工作原理,包括初始化S表过程,使用种子密钥填充K表,以及通过S表和K表生成流密钥来加密明文的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RC4加密分为两部分:

1、初始化S表

2、生成流密钥

一、初始化S表:

(1)线性填充S表

(2)种子密钥循环填充K表

(3)K表对S表初始置换

1、S表:对S表进行线性填,一般为256字节。如S=[0,1,2.....255]

2、K表:用种子密钥填充另一个256字节的K表,若密钥为345,则K=[3,4,5,3,4,5...]

//种子密钥长度
Len = strlen(key);
//填充S和K表
for(i = 0;i <= 255;i++) 
{
    s[i] = i;
    k[i] = key[i%Len];
}
/*
若key=[3,4,5],则strlen(key)=3
k[0]=key[0%3]=3
k[1]=key[1%3]=4
k[2]=key[2%3]=5
k[3]=key[3%3]=3
...
*/

3、初始置换:

j = 0;
for(int i = 0;i <= 255; i++)
{
    j = (j + s[i] + k[i]) % 256;
    swap(s[i],s[j]);
}

//i=0,j=0时, j=(0+0+3)%256=3, 此时将S表中的s[0]与s[3]互换,循环256次

密钥主要功能是将S表搅乱,i确保S表的每个元素都得到处理,j保证S表的搅乱是随机的。 

 二、流密码生成

为每个待加密的字节生成一个伪随机数,用来异或

i,j,t = 0;
for (int r = 0; r <= strlen(plain); r++) //plain为明文序列
{
    i = (i + 1) % 256;
    j = (j + s[i]) % 256;
    swap(s[i],s[j]);         //每生成一次就变换一次S表中的两个数
    t = (s[i] + s[j]) % 256; //s[t]就是目标伪随机数
    c[r] = s[t];             //C就是每个明文字节对应的伪随机数列
    cypher[r] = plain[r] ^ c[r]
}

不同的S表在经流密钥生成算法后可以得到不同的子密钥序列,将S表和明文进行xor运算,得到密文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值