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 中的异或运算,因此解密与加密一致。

  破解方式也主要是以限定范围的暴力破解。

 

posted @ 2018-10-04 23:02  Bl0od  阅读(336)  评论(0编辑  收藏  举报