首页
学习
活动
专区
圈层
工具
发布

RC4

作者头像
hotarugali
发布2022-03-01 09:36:13
发布2022-03-01 09:36:13
2.8K0
举报

1. 简介

RC4 属于同步流密码,同步流密码的加密器分成密钥流产生器和加密变换器两个部分。

2. 特性

  • 密钥长度可变,面向字节操作;
  • 用置换加密(异或)输入消息,每次一个字节;
  • 至少采用 128128128 比特的密钥

3. 加密过程

3.1 密钥调度算法(Key-Scheduling Algorithm, 简称 KSA)

  • 由密钥流决定一个 0∼255 的置换
  • 初始化时,状态矢量S被设置为 0255, 即 S[0]=0,S[1]=1,⋯ ,S[255]=255
  • 种子密钥 K L 个字节,循环填充到矢量 T 256 个字节中
  • T[i] 确定将 S[i] 置换为 S中的另一个字节
  • j=(j+S[i]+T[i])mod 256
  • 由于对S的操作只是置换,因此,S 仍然为一个 \{0,1,\cdots,255\} 的置换
代码语言:javascript
复制
//初始化S和T
for i = 0 to 255 do
    S[i] = i;
    T[i] = K[i mod L];
//S的初始置换
j = 0;
for i = 0 to 255 do
    j = (j + S[i] + T[i])(mod 256)
    swap(S[i],S[j]);

3.2 伪随机子密钥生成算法(Pseudo Random-Generation Algorithm, 简称 PRGA)

  • 种子密钥不再使用,重复使用向量S生成密钥流
  • j=(j+S[i])mod 256
  • S[i]S[j]进行交换,t=(S[i]+S[j])mod 256
  • Ki=S[t]
  • S[255] 完成置换后,操作再从 S[0]开始重复
代码语言:javascript
复制
i = j = 0;
for each message byte Mi
    i = (i + 1)(mod 256);
    j = (j + S[i])(mod 256);
    swap(S[i],S[j]);
    t = (S[i] + S[j])(mod 256);
    Ki = S[t];
    Ci = Mi XOR Ki
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 简介
  • 2. 特性
  • 3. 加密过程
    • 3.1 密钥调度算法(Key-Scheduling Algorithm, 简称 KSA)
    • 3.2 伪随机子密钥生成算法(Pseudo Random-Generation Algorithm, 简称 PRGA)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档