6、RC4算法

2023-11-15

参考:

https://blog.csdn.net/huangyimo/article/details/82970903


RC4算法

RC4算法变量

RC4算法流程

RC4算法相关


RC4算法

RC4加密算法是Ron Rivest在1987年设计出的密钥长度可变加密算法簇。起初该算法是商业机密,直到1994年,它才公诸于众。RC4属于对称密码算法中的序列密码(stream cipher,流密码),它是可变密钥长度,面向字节操作的序列密码。它是一种基于非线性数据表变换的序列密码,它以一个足够大的数据表为基础,对表进行非线性变换,产生非线性的序列密钥。

RC4算法取n=8,使用2^n=2^8=256个字节构成的S表和两个字节指针(i,j),总共需要258字节的存储空间。

补:序列密码(流密码):

流密码也属于对称密码,但与分组(块)加密算法不同的是,流密码不对明文数据进行分组,而是用密钥生成与明文一样长短的密码流对明文进行加密,加解密使用相同的密钥。也就是说,RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密。

RC4算法变量

介绍RC4算法的几个关键变量:

 1)密钥流:RC4算法的关键是根据明文和密钥生成相应的密钥流,密钥流的长度和明文的长度是对应的,也就是说明文的长度是500字节,那么密钥流也是500字节。当然,加密生成的密文也是500字节,因为密文第i字节=明文第i字节^密钥流第i字节; 

 2)状态向量S:长度为256,S[0],S[1].....S[255]。每个单元都是一个字节,算法运行的任何时候,S都包括0-255的8比特数的排列组合,只不过值的位置发生了变换;

 3)临时向量T:长度也为256,每个单元也是一个字节。如果密钥的长度是256字节,就直接把密钥的值赋给T,否则,轮转地将密钥的每个字节赋给T;

4)密钥K:长度为1-256字节,注意密钥的长度keylen与明文长度、密钥流的长度没有必然关系,通常密钥的长度16字节(128比特)。

RC4算法流程

RC4算法是一种基于非线性数据表变换的序列密码,包括密码调度算法(简称KSA)和伪随机生成算法(简称PRGA)。RC4序列密码算法也可说是密钥流产生算法,其加密仅为明文与密钥模2相加。

1、密钥调度算法KSA(Key Scheduling Algorithm):

作用:实现对原始数据的随机化排序---初始随机化S表;

RC4算法中,取n=8(即8级线性移位寄存器),使用28=256个字节构成S表,存储空间为258字节(256字节S表,n和指针(I和J)共两个字节),把S表和I,J的具体取值称为RC4的一个状态。

初始化S盒:直接构造一个S[256],遍历0-255,然后创建临时T[256],用于存储种子秘钥,长度不够循环填充直到T被填满,根据T[i]将S[i]与S中的另外一个字节对换,对S的操作仅仅是交换,唯一改变的是位置,但里面的元素是没变的还是0-255; KSA的算法如图所示。

KSA算法描述如下:

  1. 初始化S表(对S表进行线性填充),即令S0=0,S1=1,…,S255=255;
  2. 由种子密钥填充到密钥T表(T表为256字符)中,如果种子密钥长度小于T的长度,则依次重复填充,直至将T填满;
  3. 用T表对S表进行初始置换,J的初始值为0,对于I从0到255循环,计算J=(J+Si+Ti )mod 256交换Si和Sj。

举例说明如下:

RC算法中,取n=3,即有2^3=8种状态,即8个元素;

  • 初始化S表:
  • 选择密钥,密钥由0到7的数以任意顺序组成,这里选取567作为密钥并填充密钥表T,填充后为:

0

1

2

3

4

5

6

7

S[0]

S[1]

S[2]

S[3]

S[4]

S[5]

S[6]

S[7]

5

6

7

5

6

7

5

6

T[0]

T[1]

T[2]

T[3]

T[4]

T[5]

T[6]

T[7]

  • 循环:J=(J+Si+Ti )mod 8交换Si和Sj,作用是进行随机化排序;

        当J=0,I=0时,得到:S0=0;J=(0+0+5)mod 8=5,交换S0和S5;

        索引 I 加1;

        J=(5+1+6)mod 8=4,交换S1和S4;

        如此循环,当循环执行完毕后,得到初始随机化的S表。S表一旦完成初始随机化,种子密钥就不再被使用。

2、伪随机生成算法PRGA(Pseudo-Randomoeneration-Algorithm)

作用:随机选取数据作为密钥字节---输出密钥流,PRGA借由KSA产生的S生成伪随机密钥序列Z[i]。

在KSA将数组S进行初始随机排序的基础上,PRGA从数组中随机选取元素作为密钥流字节,同时修改数组S的排序,以便于下一次密钥流的选取。

PRGA的算法如图所示:

举例说明如下:

设经过KSA算法,循环执行完毕之后得到初始化的数组为:

S[0]

S[1]

S[2]

S[3]

S[4]

S[5]

S[6]

S[7]

从I=0,J=0开始,RC4通过循环开始计算第一个密钥子:

  • 计算i=(i+1)mod 8 =1;j=(j+Si) mod 8=(0+4) mod 8=4;
  • 交换S1和S4;交换后数组为:

1

4

S[0]

S[1]

S[2]

S[3]

S[4]

S[5]

S[6]

S[7]

  • 计算h=(Si+Sj)mod 8=(S1+S4)mod 8=5;k=Sh=S5=6;
  • 得到第一个密钥为6,二进制表示为110,

反复进行以上过程,直到生成二进制位的数量等于明文位的数量。

加密:即将密钥字符k与明文字符进行异或运算输出密文。

注:RC4序列密码算法即密钥产生算法;加密仅仅为明文密钥模2相加。

3、RC4算法程序化流程

1)初始化S和T

根据秘钥生成S盒;

初始化S盒:直接构造一个S[256],遍历0-255,然后创建临时T[256],用于存储种子秘钥,长度不够循环填充直到T被填满,根据T[i]将S[i]与S中的另外一个字节对换,对S的操作仅仅是交换,唯一改变的是位置,但里面的元素是没变的还是0-255;

                        for i=0 to 255 do

                           S[i]=i;

                           T[i]=K[ I mod keylen ];

2)初始排列S

                        j=0;

                        for i=0 to 255 do

                           j= ( j+S[i]+T[i])mod256;

                           swap(S[i],S[j]);

3)产生密钥流

由于异或运算的对合性,RC4加密解密使用同一套算法:

                        i,j=0;

                        for r=0 to len do  //r为明文长度,r字节

                           i=(i+1) mod 256;

                           j=(j+S[i])mod 256;

                           swap(S[i],S[j]);

                           t=(S[i]+S[j])mod 256;

                           k[r]=S[t];

RC4算法相关

1、RC4算法特点

 RC4算法采用的是OFB(输出反馈工作方式),所以可以用一个短的密钥产生一个相对较长的密钥序列。OFB方式的最大的优点是消息如果发生错误(这里指的是消息的某一位发生了改变,而不是消息的某一位丢失),错误不会传递到产生的密钥序列上;缺点是对插入攻击很敏感,并且对同步的要求比较高。

RC4算法简单,易于实现

算法运行速度快,加密速度快;RC4的执行速度相当快,它大约是分块密码算法DES的5倍,是3DES的15倍,且比高级加密算法AES也快很多。

密钥长度可变,可变范围为1-256字节(8-2048比特),一般用256个字节

安全性:RC4有限状态自动机的每一个状态,产生一个密钥字符,由于S表有256个字节元素,可能的排列有256!,约为2的1600次幂,因此可以抵抗穷举攻击。算法安全性比较高,RC4的安全保证主要在于输入密钥的产生途径,只要在这方面不出现漏洞,采用128bit的密钥是非常安全的。在如今技术支持的前提下,当密钥长度为128比特时,用暴力法搜索密钥已经不太可行,所以可以预见RC4的密钥范围仍然可以在今后相当长的时间里抵御暴力搜索密钥的攻击。实际上,如今也没有找到对于128bit密钥长度的RC4加密算法的有效攻击方法。

2、RC4算法应用

Windows、Lotus Notes等软件系统;

SSL、TSL、WEP等协议;

APICloud;

补:一次性密码本、序列密码算法A5、RC5、ZUC!

注:

如有错误、侵权,请联系笔者更改删除!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

6、RC4算法 的相关文章

随机推荐

  • sharepoint 2010 列表数据分页控件介绍 pagination UserControl

    这里主要是介绍下最近开发的一个sharepoint列表或者文档库的分页控件 并且把它包装成一个可以支持自定义列表 Custom list 文档库 Document library 讨论板 Discussion 资源库 Assets libr
  • 创建vue项目-vue2&vue3

    1 安装node 网址 下载 Node js 中文网 可以下载最新版本 也可以点击下方按钮下载其他版本 安装时全部选择默认 点击下一步 完成之后打开cmd命令窗口 检查node js是否安装成功 再查看npm是否安装成功 2 安装vue脚手
  • Redis-事务与持久化

    目录 事务 事务命令 事务的实现 事务的开始 命令入队 事务队列 执行事务 WATCH命令 不监视的情况下 监视的情况下 事务的ACID特性 A 原子性 C 一致性 I 隔离性 D 持久性 持久化 RDB持久化 Redis DataBase
  • 搜狐畅游2018年9月15日校招真题(2)

    通过该道题目 题目描述 示例代码 include
  • 苹果的「AI 建筑师」GAUDI:根据文本生成 3D 场景

    作者 李梅 编辑 陈彩娴 转载自 AI科技评论 aitechtalk 如今 每隔一段时间就有新的文本生成图像模型释出 个个效果都很强大 每每惊艳众人 这个领域已经是卷上天了 不过 像 OpenAI 的 DALL E 2 或谷歌 的 Imag
  • devops之gcp core infrastructure fundamental,应用云;开发、部署、监控

    最后更新2022 02 09 应用云 下面来看看GCP提供什么应用PaaS服务 app engine是提供标准API的 预安装 application 自动部署 自动扩展 经济 免费每日额度 基于使用的计费 SDK 满足开发 测试 部署要求
  • 微信小程序是如何上传文件以及下载文件

    微信小程序可以使用wx uploadFile API来上传文件 使用wx downloadFile API来下载文件 上传文件的步骤如下 1 创建一个选择文件的按钮 2 用户点击按钮后 调用wx chooseImage 方法来选择文件 3
  • 【IoC】Spring IoC容器生命周期内容梳理

    Spring ApplicationContext Lifecycle 前言 关于Spring源码介绍的版本是 5 2 2 REALEASE 如果有流程不一致的地方 可以看下版本是否一致 一 本文概览 Spring IoC容器生命周期整体看
  • PyTorch grad 与 Optimizer(params) 区别

    目录 PyTorch grad 与 Optimizer params 区别 PyTorch grad 与 Optimizer params 区别 Tensor 可以设置属性 requires grad True False 说明其是否进行梯
  • windows构建环境 MSYS2 安装与配置

    1 说明 MSYS2 是提供了bash shell等linux环境 版本控制软件 git hg 和MinGW w64工具链软件 是MSYS的一个升级版 集成了pacman和Mingw w64的Cygwin升级版 一般用于构建windows
  • 西门子、三菱指令大全

    一 西门子PLC编程指令 1 位逻辑指令 1 1 常开接点 地址 1 2 常闭接点 地址 1 3 XOR 位异或 1 4 NOT 信号流反向 1 5 输出线圈 1 6 中间输出 1 7 R 线圈复位 1 8 S 线圈置位 1 9 RS 复位
  • 数据可视化平台理论与实践

    前面说完了大数据开发平台的核心组件 作业调度系统 接下来讨论一下大数据开发平台的脸面之一 数据可视化平台 和调度系统一样 这又是一个很多公司可能想要自己造一个轮子的系统 数据可视化平台是什么 不过 慢着 先等一下 什么是数据可视化平台 我们
  • R语言数据集的学习

    创建数据集 一 数据集的概念 二 数据结构 1 向量 2 矩阵 3 数组 4 数据框 一 数据集的概念 按照个人要求的格式来创建含有研究信息的数据集 这是任何数据分析的第一步 在R中 这个任务包括以下两步 选择一种数据结构来存储数据 将数据
  • ipad如何改造成linux终端,如何实现让ipad上使用终端terminal

    实现的具体步骤如下 1 cydia安装openssh 2 installous安装issh 3 进入issh 选add configuration description 随便填 host localhost port 22 login r
  • matlab内存管理(二)

    转自 http hi baidu com bi CB AB C9 FA BB A8 blog item 5ab86c38ac2f45e715cecbab html 1 确保内存的连续性Matlab 中数组必须占用连续分配的内存段当无法为新建
  • web前端基础:HTML文字和段落标签

    标题标签 h1 h1 h6 h6 段落标签 p p align对齐属性值 值 描述 left 左对齐 right 右对齐 center 居中对齐 justify 对行进行伸展 每行可以有相等的长度 列表标签 有序列表 ol li 列表项 l
  • win10上安装python3.9.0+robotframework

    win10上安装python3 9 robotframework python3 9 0下载安装 robotframework安装 wxpython安装 ride安装 python3 9 0下载安装 下载地址 python3 9 0下载地址
  • el-dialog水平垂直居中

  • 珠玑算法的Java实现

    珠玑算法的Java实现 珠玑算法 也称作Mastermind 是一种猜测和推理游戏 通常由两个玩家参与 一方作为 代码制造者 随机生成一个颜色序列 而另一方作为 代码猜测者 试图在有限的猜测次数内猜出正确的序列 猜测者每次猜测后 制造者会给
  • 6、RC4算法

    参考 https blog csdn net huangyimo article details 82970903 RC4算法 RC4算法变量 RC4算法流程 RC4算法相关 RC4算法 RC4加密算法是Ron Rivest在1987年设计