RC4加密算法原理学习
本文最后更新于271 天前,其中的信息可能已经过时,如有错误可以直接在文章下留言

附上我bilibili看的视频,讲的很好。

RC4加密算法的过程 代入例子计算_哔哩哔哩_bilibili

这篇文章也是按照这个视频的内容来写的,不过是依据我自己的理解。

首先RC4加密算法执行有一个S盒,T表,一个密钥K,和一个被加密的明文。

RC4加密算法的第一步就是初始化S盒和T表,我们假设给出的密钥K为19034530,那么初始化赋值的C语言代码如下:

for(i=0;i<256;i++)
{
   S[i]=i
   T[i]=K[i%strlen(key)]
}

嗯这里倒是很好理解,S盒显然是0到255的所有数字,T表则是密钥一直循环排布,它的长度显然也是0到255

如上面那个视频,如图

第二步则是一个初始的置换,其C语言代码如下:

j=0
for(i=0;i<256;i++)
{ 
  j=(j+S[i]+T[i])%256
    swap=(S[i],S[j])
}

因为密钥是独特的,T表是独特的,那么这个步骤就可以根据T表打乱出一个独特的S盒来,这个不好演示。

最后一步则是得到密钥流k,再让明文与密钥流异或得到密文。密钥和密钥流是两个不同的概念,我简单问了一下AI,如图

得到密钥的C语言代码如下:

i=j=0
for(h=0;h<datalen;h++)
{ 
    i=(i+1)%256
    j=(j+S[i])%256
    swap(S[i],S[j])
    t=(S[i]+S[j])%256
    k=S[t]
    D[h]^=k
}

这一步显然,就是边打乱S盒,边加密。上面的datelen指的是待加密明文的长度,D表示明文。

RC4加密算法是可逆的,可以通过密文得到其明文,那么我们就要思考解密过程为什么是可以实现的

在只知道密文和密钥的情况下,S盒是固定的,而根据密钥得到的T表也是唯一的,所以我们还是可以的到在加密时与明文异或的密钥流k,异或运算可逆,那么在进行异或运算即可得到明文。

下面是解出密文的一个脚本

from Crypto.Cipher import ARC4
mingwen=[]
arrBytes=bytes(mingwen)
key=b''
enc=ARC4.new(key)
flag=enc.decrypt(arrBytes)
print(flag)

或者在Cyberchef里面也是可以解密的。

下面是一道例题

[MoeCTF 2023]RRRRRc4 – Arnold’s Blog (arnold66.top)

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇