RC4
RC4(Rivest Cipher 4)是一种流加密算法,密钥长度可变。并且因为加解密时使用的密钥相同,所以也为对称加密。加密过程和解密过程仅明密文的区别。
主要分为初始化 s 盒和伪随机密码生成组成:
1 # RC4 —— Rivest Cipher 4 —— Ronald Rivest 设计 ############# 2 # 流密码,同时也是对称加密算法 ############# 3 # 原理:初始化和伪随机子密码生成器 ############# 4 # 漏洞:密钥序列出现重复密文可能被破解 ############# 5 # 6 7 # 初始化函数 8 # 将 S 盒搅乱,以便之后伪随机子密码生成 9 def rc4_init(key): 10 i, j, L = 0, 0, len(key) 11 k = [0]*256 12 s = [0]*256 13 for i in range(256): 14 s[i] = i 15 k[i] = key[i % L] 16 for i in range(256): # 打乱 S 盒 17 j = (j + s[i] + k[i]) % 256 18 s[i], s[j] = s[j], s[i] 19 return s 20 21 def rc4_crypt(sbox, plain): 22 i, j = 0, 0 23 for k in range(len(plain)): 24 i = (i + 1) % 256 25 j = (j + sbox[i]) % 256 26 sbox[i], sbox[j] = sbox[j], sbox[i] 27 plain[k] ^= sbox[(sbox[i] + sbox[j])%256] #每加密一个密文 S 盒都会变化一次 28 print(bytes(plain)) 29 30 def RC4(): 31 key = input("密钥输入:") 32 plain = input("明文输入:") 33 rc4_crypt(rc4_init(str.encode(key)), [x for x in str.encode(plain)]) 34 35 if __name__ == '__main__': 36 RC4()
因为加密只与密钥有关,而加密主要是靠 S 中的异或运算,因此解密与加密一致。
破解方式也主要是以限定范围的暴力破解。
本文来自博客园,作者:Bl0od
转载请注明原文链接:https://www.cnblogs.com/zUotTe0/p/9743741.html