zoukankan      html  css  js  c++  java
  • 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 中的异或运算,因此解密与加密一致。

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

  • 相关阅读:
    [Intellij] 软件设置和常用快捷键
    [Intellij] Project Structure 配置说明
    [日志log] 常用log日志记录方式对比和详解
    [J2EE]web.xml各个版本模板
    [技术选型] CDH-Cloudera Distribution Hadoop
    [技术选型] dubbo
    [技术选型] spring boot
    [hbase] HBase内置过滤器的一些总结
    [zookeeper] Zookeeper伪分布式集群配置
    [maven] settings 文件 本地maven仓库
  • 原文地址:https://www.cnblogs.com/zUotTe0/p/9743741.html
Copyright © 2011-2022 走看看