本文最后更新于 475 天前,其中的信息可能已经过时,如有错误可以直接在文章下留言
附上我 bilibili 看的视频,讲的很好。
RC4 加密算法的过程 代入例子计算_哔哩哔哩_bilibili
这篇文章也是按照这个视频的内容来写的,不过是依据我自己的理解。
首先 RC4 加密算法执行有一个 S 盒,T 表,一个密钥 K,和一个被加密的明文。
RC4 加密算法的第一步就是初始化 S 盒和 T 表,我们假设给出的密钥 K 为 19034530,那么初始化赋值的 C 语言代码如下:
嗯这里倒是很好理解,S 盒显然是 0 到 255 的所有数字,T 表则是密钥一直循环排布,它的长度显然也是 0 到 255
如上面那个视频,如图
第二步则是一个初始的置换,其 C 语言代码如下:
因为密钥是独特的,T 表是独特的,那么这个步骤就可以根据 T 表打乱出一个独特的 S 盒来,这个不好演示。
最后一步则是得到密钥流 k,再让明文与密钥流异或得到密文。密钥和密钥流是两个不同的概念,我简单问了一下 AI,如图
得到密钥的 C 语言代码如下:
这一步显然,就是边打乱 S 盒,边加密。上面的 datelen 指的是待加密明文的长度,D 表示明文。
RC4 加密算法是可逆的,可以通过密文得到其明文,那么我们就要思考解密过程为什么是可以实现的
在只知道密文和密钥的情况下,S 盒是固定的,而根据密钥得到的 T 表也是唯一的,所以我们还是可以的到在加密时与明文异或的密钥流 k,异或运算可逆,那么在进行异或运算即可得到明文。
下面是解出密文的一个脚本
或者在 Cyberchef 里面也是可以解密的。
下面是一道例题