流密码与RC4密码初认识

一、前言

流密码是对称密码算法,是私钥密码系统中的一个分组。流密码的转换是随”变换”而变换的,像水流一样源源不断的产生,是对称密码算法,从明文输入流逐位或逐字节产生密文输出。今天我们来初认识一下流密码和使用最广泛的流密码RC4。

二、什么是流密码

流密码是私钥体质下的一个对称加密,类似于简单算法的”一次一密”,不过”一次一密”是真正的理想密码只要不能获得密码乱码本,就是完全保密。流密码使用的是伪随机数流,利用密钥产生一个密钥流Z=Z1Z2Z3…,然后利用此密钥流依次对明文X=X0X1X2…进行加密,这样产生的密码就是序列密码,也称为流密码。

设计流密码的因素

  • 加密序列的周期要长,若出现重复的周期过短,容易被破解
  • 密钥流应该尽可能地接近真正随机数流的特征
  • 密钥长度要长,以避免琼穷举攻击

流密码就是使用较短的一串数字(叫它密钥吧),来生成无限长的伪随机密码流,当然事实上只需要生成和明文长度一样的密码流就够了。

流密码是将明文划分成字符(如单个字母),或其编码的基本单元(如0,1数字),字符分别与密钥流作用进行加密,解密时以同步产生的同样的密钥流实现。

通俗的讲,产生一串序列来作为加密的密钥流,从密钥流中按规则依次选取密钥,这些不同的密钥分别来加密每个字符。

流密码的强度依赖于密钥序列的随机性和不可预测性。

核心在于密钥流生成器的设计。

要保证收发两端密钥流的精确同步。

  • 种子密钥
  • 信息流(明文流)
  • 密文流
  • 密钥流

由此流密码的基础上,用较短的密钥产生无限长的密码流的方法非常多,其中有一种就叫做RC4。

三、RC4算法基础介绍

RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。RC4算法是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电子密码。

在介绍RC4前,说说那个“相加”运算怎么实现。现在我们把明文的信息限制在Ascii码字符集内(它已经能表示所有的英文资料了)

每个字符是一个比特,占8位。

假设明文是abc,

a、b、c的ascii值分别为

  1. 97、98、99 

二进制形式为

  1. 01100001、01100010、01100011 

密钥流和明文长度一样,假设是sdf,同样可以得到二进制流

  1. 01110011、01100100、01100110 

让他们在对应位做异或运算就可以得到密文了c语言有^运算符来实现“相加”的操作。

我们就直接对字符进行“相加”即

  1. a^s, b^d, c^f 

二进制形式为

  1. 00010010、00000110、00000101 

它们分别表示

ascii码值为

  1. 18、6、5 

的字符,在文本编辑器里打开是乱码,没有关系,反正是密文嘛

四、RC4

该算法是一个可变密钥长度、面向字节操作的流密码。该算法以随机置换作为基础,其密码周期很可能大于10^100,且该算法的运行速度很快。

RC4被用于为网络浏览器和服务器间通信而制定的SSL/TLS(安全套接字协议/传输层安全协议)标准中,以及作为IEEE 801.11无线局域网标准一部分的WEP(Wired Equivalent Privacy)协议和新的WiFi受保护访问协议(WAP)中。

从这些应用来看,RC4构成了当今网络通信的非常重要的部分,因此这个算法非常重要。

算法描述

  • 首先你指定一个短的密码,储存在key[MAX]数组里,还有一个数组S[256],令S[i]=i。然后利用数组key来对数组S做一个置换,也就是对S数组里的数重新排列,排列算法为
  • 利用上面重新排列的数组 S 来产生任意长度的密钥流
  • 用T产生S 的初始置换,置换伪码如下,因为对S的操作仅是交换,S仍然包含所有值为 0-255的元素。
  • 因为对S 的操作仅是交换,S仍然包含所有值为0-255的元素。

算法代码

  1. # -*- coding: utf-8 -*-   
  2.  #by yuhao   
  3.  import random, base64   
  4.  from hashlib import sha1   
  5.  def crypt(data, key):   
  6.      x = 0   
  7.      box = range(256)   
  8.      for i in range(256):  
  9.          x = (x + box[i] + ord(key[i % len(key)])) % 256  
  10.          box[i], box[x] = box[x], box[i]   
  11.      x = y = 0   
  12.      out = []   
  13.      for char in data:   
  14.          x = (x + 1) % 256  
  15.          y = (y + box[x]) % 256   
  16.          box[x], box[y] = box[y], box[x]   
  17.          out.append(chr(ord(char) ^ box[(box[x] + box[y]) % 256]))   
  18.      return ''.join(out)      
  19.  def tencode(data, key, encode=base64.b64encode, salt_length=16):    
  20.      salt = ''  
  21.      for n in range(salt_length):  
  22.          salt += chr(random.randrange(256))  
  23.      data = salt + crypt(data, sha1(key + salt).digest())   
  24.      if encode:   
  25.          data = encode(data)  
  26.      return data   
  27.  def tdecode(data, key, decode=base64.b64decode, salt_length=16):   
  28.      """RC4 decryption of encoded data"""   
  29.      if decode:   
  30.          data = decode(data)  
  31.      salt = data[:salt_length]  
  32.      return crypt(data[salt_length:], sha1(key + salt).digest())  
  33.  # 需要加密的数据   
  34.  data = 'freebuf hello'   
  35.  # 密钥   
  36.  key = 'yuhao'  
  37.  # 加码  
  38.  encoded_data = tencode(datadata=data, keykey=key)  
  39.  print encoded_data  
  40.  # 解码  
  41.  decoded_data = tdecode(data=encoded_datakeykey=key)  
  42.  print decoded_data  

五、总结

不过这里有一个小问题,当RC4的密钥长度超过128位时,目前没有任何攻击方法能够破解。不过 WEP协议易受到一种特殊的攻击方式攻击,但这个问题本质上并不在与RC4本身,而是RC4密钥的产生途径有漏洞

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/146295.html<

(0)
管理的头像管理
上一篇2025-03-11 00:49
下一篇 2025-03-11 00:51

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注