密码学的RC4算法

实验RC4加密算法,对字符串“thisisagoodstudent”进行加密,密钥为123456H(十六进制数)

首先对密钥进行分析,一个字节为8位二进制数,一个十六进制数为4位二进制数,那么一个字节就为两个十六进制数。那么密钥就是 12 34 56 这样的三个字节重复排列直到有256个字节,如此密钥就可以被求出来了。

接下来要进行 密钥调度算法,也就是KSA,Key-Scheduling Algorithm

这个算法的目的是为了将数据表S随机化,它的具体操作是这样的。
定义i和j,令i和j的初始值都为0,然后利用i这个变量对S表进行赋值,我们知道S表是有256个数的,用Si来表示的话,这256个数就是从S(0)到S(255),同样它对应的i值为0,1,2,3,4,254,255.。接下来对j值进行处理得到256个键值对<i,j>,也就是求出来i=0的时候j的值为多少,i=1的时候j的值为多少,然后再将每一个键值对中所对应的i和j交换,这样就可以起到混乱S表的作用。
For i=0 to 255
j=(j+ Si+Ki )mod 256;
交换Si和Sj 。

接下来我们要根据表S来生成密钥流,这就是伪随机数生成算法PRGA

我们此时要知道一件事,那就是此时的S(i)已经与一开始的S(i)不同了,在混乱过S表之后,S表的数值已经变动了。然后我们通过以下操作来找到密钥流的第一个字节K。
大意是i从0到255不断取值,在每次操作中,求得相应的j,t,乃至求得i取不同值时的K值。
i=0,j=0;
i=(i + 1)mod 256;
j= (j + Sj )mod 256;
交换Si和Sj;
t=(Si+Sj )mod 256;
K=St

求得密文

如此如此如此,密钥流就生成了,我们再利用明文与密钥流异或(异或相同为0不同为1)
在代码部分,我参考了一位大神的博客
https://blog.csdn.net/u011377996/article/details/85221508

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值