推荐一个B站up主的视频,本文章就是根据这个视频来写的
对称加密算法:
密文+密钥->明文
明文+密钥->密文
流密码算法:一个字节一个字节进行加密
RC4是以一个足够大的表S为基础,对表进行非线性转变,产生密钥流(典型的异或加密)
初始化S表
1. 对S表进行线性填充,一般为256个字节
线性填充就是从0到1挨着挨着来排,比如S[0]=0,S[1]=1;
2.用种子密钥填充另一个256字节的K表
这个种子密钥要一直用,比如是1234,他就123412341.。。。这样一直填充下去直到填满
3.用K表对S表进行初始只换
从S0开始到S255对每个s[i]根据K[i]确定一个方案
将S[i]转换为S中的另一个字节
K这个数组就是储存这个伪随机数的
每一轮的S都不同
代码部分(有大量的255,256,这就是RC4的标志)
from Crypto.Cipher import ARC4
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
def rc4_encrypt(key, plaintext):
cipher = ARC4.new(key)
ciphertext = cipher.encrypt(pad(plaintext, ARC4.block_size))
return ciphertext
def rc4_decrypt(key, ciphertext):
cipher = ARC4.new(key)
plaintext = unpad(cipher.decrypt(ciphertext), ARC4.block_size)
return plaintext
# 测试代码
key = get_random_bytes(16) # 16 bytes key for simplicity, but you can use any length you want.
plaintext = b"Hello, world!"
ciphertext = rc4_encrypt(key, plaintext)
print(ciphertext.hex()) # 输出加密后的密文
print(rc4_decrypt(key, ciphertext)) # 解密并输出明文