python3.7游戏_Python3.7实现RC4加密解密(超详细)

在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一。本文直接给出加密解密代码,看图,看注释!

运行结果:

d9ad5fc524ec?utm_campaign=haruki

捕获.PNG

加密源码:

import base64

def rc4_main(key = "init_key", message = "init_message"):

# print("RC4加密主函数")

s_box = rc4_init_sbox(key)

crypt = str(rc4_excrypt(message, s_box))

return crypt

def rc4_init_sbox(key):

s_box = list(range(256)) # 我这里没管秘钥小于256的情况,小于256不断重复填充即可

# print("原来的 s 盒:%s" % s_box)

j = 0

for i in range(256):

j = (j + s_box[i] + ord(key[i % len(key)])) % 256

s_box[i], s_box[j] = s_box[j], s_box[i]

# print("混乱后的 s 盒:%s"% s_box)

return s_box

def rc4_excrypt(plain, box):

# print("调用加密程序成功。")

res = []

i = j = 0

for s in plain:

i = (i + 1) % 256

j = (j + box[i]) % 256

box[i], box[j] = box[j], box[i]

t = (box[i] + box[j]) % 256

k = box[t]

res.append(chr(ord(s) ^ k))

# print("res用于加密字符串,加密后是:%res" %res)

cipher = "".join(res)

# print("加密后的字符串是:%s" %cipher)

# print("加密后的输出(经过编码):")

# print(str(base64.b64encode(cipher.encode('utf-8')), 'utf-8'))

return (str(base64.b64encode(cipher.encode('utf-8')), 'utf-8'))

# rc4_main("123456sh","123456sh")

解密源码:

import base64

def rc4_main(key = "init_key", message = "init_message"):

# print("RC4解密主函数调用成功")

s_box = rc4_init_sbox(key)

crypt = rc4_excrypt(message, s_box)

return crypt

def rc4_init_sbox(key):

s_box = list(range(256)) # 我这里没管秘钥小于256的情况,小于256不断重复填充即可

# print("原来的 s 盒:%s" % s_box)

j = 0

for i in range(256):

j = (j + s_box[i] + ord(key[i % len(key)])) % 256

s_box[i], s_box[j] = s_box[j], s_box[i]

# print("混乱后的 s 盒:%s"% s_box)

return s_box

def rc4_excrypt(plain, box):

# print("调用解密程序成功。")

plain = base64.b64decode(plain.encode('utf-8'))

plain = bytes.decode(plain)

res = []

i = j = 0

for s in plain:

i = (i + 1) % 256

j = (j + box[i]) % 256

box[i], box[j] = box[j], box[i]

t = (box[i] + box[j]) % 256

k = box[t]

res.append(chr(ord(s) ^ k))

# print("res用于解密字符串,解密后是:%res" %res)

cipher = "".join(res)

# print("解密后的字符串是:%s" %cipher)

# print("解密后的输出(没经过任何编码):")

return cipher

# rc4_main("123456sh", "ABHCum92PMOXwqI=")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值