密码学学习笔记(二)简单加密算法实现———rc4

梳理一下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=' ')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值