梳理一下ctf遇到的加密算法。
1.rc4加密算法
rc4属于对称加密算法中的流密码加密算法,密钥长度可变,面向字节操作。
对称加密:加密解密采取相同密钥,通过分组密码和流密码实现
流密码:按照单个字符进行加密。
分组密码:就是指先对明文进行分组,然后对分组后的明文一组一组地进行加密
rc4以一个足够大的表s为基础,对密钥进行非线性变换,产生密钥流。
加密过程
1.初始化s表
第一步,对s表进行线性填充(s[0]=0,s[1]=1.....)一般为256字节。
第二步,使用初始密钥对k表进行初始化填充。
for i in range(256):
k[i]=key[i%len(key)]
第三步,使用k表对s表进行初始置换
j=0
for i in range(256):
j=(j+s[i]+k[i])
swap(s[i],s[j])
2.密钥流生成
通过s表为每一个密文生成一个伪随机数用来异或。
k=[]
i=0
j=0
for r in range(len):
i=(i+1)%256
j=(j+s[i])%256
swap(s[i],s[j])
t=(s[i]+s[j])%256
k.append(s[t])
python实现
def swap(a,b):
temp=a
a=b
b=temp
code_="l4ncer"
key_="123456"
code=[]
key=[]
for i in range(len(code_)):
code.append(ord(code_[i]))
for i in range(len(key_)):
key.append(ord(key_[i]))
s=[]
k=[]
for i in range(256):
s.append(i)
k.append(key[i%6])
j=0
for i in range(256):
j=(j+s[i]+k[i])%256
temp = s [i]
s [i] = s [j]
s [j] = temp
j=0
i=0
xor_code=[0]*len(code)
for r in range(len(code)):
i=(i+1)%256
j=(j+s[i])%256
swap(s[i],s[j])
t=(s[i]+s[j])%256
xor_code[r]=s[t]
for i in range(len(code)):
code[i]=code[i]^xor_code[i]
print(hex(code[i]),end=' ')