对称密码算法Rijndael解析—加密

简介:

   这篇文章是 对我的上一篇博文的延续,之前讲解了 AxCrypt的安装于环境配置,这一章就开始谈谈其内部算法的实现。下面一篇是对其加密部分的讲解。

    Rijndael算法是一种对称的密码算法。它允许可变动的数据区块及金钥的长度。数据块与金钥长度的变动是各自独立的。块长和密钥长度可以分别指定程128192或者256位。其在某些操作是在字节级上定义的。字节表示有限字段GF(2^8)中的元素,一个字节中有8位。其他操作都根据4字节来定义。程序的功能架构如图1-1所示:

                            图1-1 程序功能流程

一、程序的输入数据

Rijndael算法中,外部输入数据有两部分构成,一个是State、一个是Cipher KeyState是运算过程中锁产生的中间值,是一个4xNb的矩阵,Nb由数据长度除以32位求得,其实际的操作结果是把输入数据分割成了Nb个区块。Cipher Key是用来加密的密钥,也是一个4xNk的矩阵,Nk可由密钥长度除以32位求得,与State类似,实际的操作结果是把密钥分割成Nk32位的子密钥。

在操作过程中,数据均用十六进制表示法表示,例如:

32 = 00110010(1 byte)

在程序执行部分,主要分为两大部分:1、加密操作2、密钥编制

二、加密操作

   在这里的加密操作的对象就是上面介绍的State,按照该算法的标准文档可知,加密算法可以简单的描述为先将State进行AddRoundKey操作,而后经过多次的循环转置操作(包括:SubBytes操作、ShiftRows操作、MixColumns操纵、AddRoundKey操作),进行的次数Nr由上面提到的NbNk来共同决定,具体如表2-1所示。

                            表2-1 Nr取值表

Nr

Nb = 4

Nb = 6

Nb = 8

Nk = 4

10

12

14

Nk = 6

12

12

14

Nk = 8

14

14

14

   通过上表我们很容易得知对我我们的128位的操作,所进行的次数为10次。程序的大概执行框架图如图2-1所示。

                                          图2-1 程序执行框架图

程序的执行流程图与程序执行框架图类似,如图2-2所示

                      图2-2 加密部分程序流程图

下面就对该部分中的Transformations算法一一介绍。

1、1-SubBytes算法

1-SubBytes也叫做字节取代转换,是一个以字节为单位的非线性取代运算,取代表(S-Box)是经过两个运算过程而建立的。而且是可逆的。以下所说的运算数据是StateCipher Key通过异或运算获得的。(异或运算可表示为(a^b)=(a’and b) or (a and b’))这里用Data表示,在改运算中是通过DataS-Box中的一个映射进行的,用S-Box对应的坐标中的数值取代Data中的数值,例如在Data中的一个数值是十六进制的19,则在S-BoxX坐标就为1Y坐标就为9。则在S-Box中对应坐标的数值为d4,依次类推,将这个4xNr的矩阵中每个数值都进行映射替换。

22-ShiftRows算法

该操作也即为移位转换操作。在这个转换中Data(其实也就是State)的每一列以不同的偏移量做环状位移,第0列不动,接下来的几列按照Nb的大小进行相应的移位操作,我们现在的Nb=4,所以第1列移位1位,第2列移位2列,第3列移位3位。该移位是循环左移操作。具体的偏移量与区块数目Nb的关系如表2-2所示。

Nb

C1

C2

C3

4

1

2

3

6

1

2

3

8

1

3

4

33-MixColumns算法

该部分算法实则是一个混行转换算法,将Data(也即State)中的每一列单列出来,与一个固定的多项式进行乘法运算。

固定的多项式为:02  03 01  01

0102  03  01

0101  02  03

0201  01  02

在这部分就要涉及到一个多项式问题。假设一个字节bb7b6b5b4b3b2b1b0组成,那么就可以将其表示成为一个多项式形式:b7*x7+b6*x6+b5*x5+b4*x4+b3*x3+b2*x2+b1*x+b0.

多项式的乘法:在乘法里面,多项式相乘之后的结果很容易造成溢位的问题,解决溢位的方式是把相乘的结果,再模余一个不可分解的多项式m(x)。在Rijndael中,定义一个这样子的多项式为

m(x)=x8+x4+x3+x+1或是(11B)16

Data也即State)中的每一列都进行同样胡操作。

44-AddRoundKey算法

该部分主要是把每一个回合的子密钥通过与Data(也即State)位异或操作。可以以列的形式将Data中的数值与子密钥进行异或运算。有关每一个回合的子密钥来说在第三部分将会详细介绍。

一、密钥的编制(Key Schedule)

回合子密钥(Round Key)是从加密密钥(Cipher Key)经过运算产生出来的。密钥编制(Key Schedule)是由密钥扩充(Key Expansion)及回合密钥的选择(RoundKey Selection)组成的,基本的理论如下:

所有回合密钥的总位数是把区块长度(block length)乘上回合数加1(Nr-1个回合,加上一个终止回合(final round)),例如,128个位的区块长度经过10个回合运算,所需要用到的所有回合密钥的总位数为1408个位。

加密密钥(Cipher Key)必须扩充为扩充密钥(Expanded Key)

回合金钥是从扩充金钥中选出来的,选择的方式如下:第一个回合金钥由前Nb个字组组成,第二个回合金钥由接下来的Nb个字组组成,余此类推。

在该部分首先将Cipher Key中的第四列提取出来,将其循环下移一位(可以理解成将这一列数据旋转成为一行,而后对其循环右移一位),而后将该列进行1-SubBytes运算,与S-Box矩阵进行映射置换操作,接着将其结果与第一列以及回合常数进行异或操作。这边生成了第一回合的第一列子密钥,而后第二列与第一回合第一列子密钥进行异或运算后生成第一回合的第二列子密钥,一次类推,第三列与第二回合的第二列子密钥异或运算,得到第一回合的第三列子密钥等。接下来的第二轮回合则是拿第一回合的子密钥进行相同操作的。知道进行Nr次以后。回合常数如表3-1所示。

3-1 回合常数

01

02

04

08

10

20

40

80

1b

36

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

00

而后接下来的便是sha-1算法了,有关sha-1算法的介绍在我之前的博文http://yiluohuanghun.blog.51cto.com/3407300/950450中有所介绍。





     本文转自 驿落黄昏 51CTO博客,原文链接:http://blog.51cto.com/yiluohuanghun/1211182,如需转载请自行联系原作者


相关文章
|
4月前
|
存储 算法 安全
如何控制上网行为——基于 C# 实现布隆过滤器算法的上网行为管控策略研究与实践解析
在数字化办公生态系统中,企业对员工网络行为的精细化管理已成为保障网络安全、提升组织效能的核心命题。如何在有效防范恶意网站访问、数据泄露风险的同时,避免过度管控对正常业务运作的负面影响,构成了企业网络安全领域的重要研究方向。在此背景下,数据结构与算法作为底层技术支撑,其重要性愈发凸显。本文将以布隆过滤器算法为研究对象,基于 C# 编程语言开展理论分析与工程实践,系统探讨该算法在企业上网行为管理中的应用范式。
128 8
|
4月前
|
存储 监控 算法
解析公司屏幕监控软件中 C# 字典算法的数据管理效能与优化策略
数字化办公的时代背景下,企业为维护信息安全并提升管理效能,公司屏幕监控软件的应用日益普及。此软件犹如企业网络的 “数字卫士”,持续记录员工电脑屏幕的操作动态。然而,伴随数据量的持续增长,如何高效管理这些监控数据成为关键议题。C# 中的字典(Dictionary)数据结构,以其独特的键值对存储模式和高效的操作性能,为公司屏幕监控软件的数据管理提供了有力支持。下文将深入探究其原理与应用。
86 4
|
5月前
|
机器学习/深度学习 监控 算法
员工上网行为监控软件中基于滑动窗口的C#流量统计算法解析​
在数字化办公环境中,员工上网行为监控软件需要高效处理海量网络请求数据,同时实时识别异常行为(如高频访问非工作网站)。传统的时间序列统计方法因计算复杂度过高,难以满足低延迟需求。本文将介绍一种基于滑动窗口的C#统计算法,通过动态时间窗口管理,实现高效的行为模式分析与流量计数。
121 2
|
2月前
|
存储 搜索推荐 算法
加密算法、排序算法、字符串处理及搜索算法详解
本文涵盖四大类核心技术知识。加密算法部分介绍了对称加密(如 AES)、非对称加密(如 RSA)、哈希摘要(如 SHA-2)、签名算法的特点及密码存储方案(加盐、BCrypt 等)。 排序算法部分分类讲解了比较排序(冒泡、选择、插入、归并、快排、堆排序)和非比较排序(计数、桶、基数排序)的时间复杂度、适用场景及实现思路,强调混合排序的工业应用。 字符串处理部分包括字符串反转的双指针法,及项目中用正则进行表单校验、网页爬取、日志处理的实例。 搜索算法部分详解了二分查找的实现(双指针与中间索引计算)和回溯算法的概念(递归 + 剪枝),以 N 皇后问题为例说明回溯应用。内容全面覆盖算法原理与实践
117 0
|
3月前
|
算法 数据安全/隐私保护
基于混沌加密的遥感图像加密算法matlab仿真
本项目实现了一种基于混沌加密的遥感图像加密算法MATLAB仿真(测试版本:MATLAB2022A)。通过Logistic映射与Baker映射生成混沌序列,对遥感图像进行加密和解密处理。程序分析了加解密后图像的直方图、像素相关性、信息熵及解密图像质量等指标。结果显示,加密图像具有良好的随机性和安全性,能有效保护遥感图像中的敏感信息。该算法适用于军事、环境监测等领域,具备加密速度快、密钥空间大、安全性高的特点。
|
4月前
|
存储 监控 算法
内网监控桌面与 PHP 哈希算法:从数据追踪到行为审计的技术解析
本文探讨了内网监控桌面系统的技术需求与数据结构选型,重点分析了哈希算法在企业内网安全管理中的应用。通过PHP语言实现的SHA-256算法,可有效支持软件准入控制、数据传输审计及操作日志存证等功能。文章还介绍了性能优化策略(如分块哈希计算和并行处理)与安全增强措施(如盐值强化和动态更新),并展望了哈希算法在图像处理、网络流量分析等领域的扩展应用。最终强调了构建完整内网安全闭环的重要性,为企业数字资产保护提供技术支撑。
123 2
|
5月前
|
存储 监控 算法
员工电脑监控场景下 Python 红黑树算法的深度解析
在当代企业管理范式中,员工电脑监控业已成为一种广泛采用的策略性手段,其核心目标在于维护企业信息安全、提升工作效能并确保合规性。借助对员工电脑操作的实时监测机制,企业能够敏锐洞察潜在风险,诸如数据泄露、恶意软件侵袭等威胁。而员工电脑监控系统的高效运作,高度依赖于底层的数据结构与算法架构。本文旨在深入探究红黑树(Red - Black Tree)这一数据结构在员工电脑监控领域的应用,并通过 Python 代码实例详尽阐释其实现机制。
106 7
|
5月前
|
存储 监控 算法
基于 C++ 哈希表算法的局域网如何监控电脑技术解析
当代数字化办公与生活环境中,局域网的广泛应用极大地提升了信息交互的效率与便捷性。然而,出于网络安全管理、资源合理分配以及合规性要求等多方面的考量,对局域网内计算机进行有效监控成为一项至关重要的任务。实现局域网内计算机监控,涉及多种数据结构与算法的运用。本文聚焦于 C++ 编程语言中的哈希表算法,深入探讨其在局域网计算机监控场景中的应用,并通过详尽的代码示例进行阐释。
106 4
|
5月前
|
存储 算法 物联网
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
95 0
|
6月前
|
监控 算法 安全
基于 C# 的内网行为管理软件入侵检测算法解析
当下数字化办公环境中,内网行为管理软件已成为企业维护网络安全、提高办公效率的关键工具。它宛如一位恪尽职守的网络守护者,持续监控内网中的各类活动,以确保数据安全及网络稳定。在其诸多功能实现的背后,先进的数据结构与算法发挥着至关重要的作用。本文将深入探究一种应用于内网行为管理软件的 C# 算法 —— 基于二叉搜索树的入侵检测算法,并借助具体代码例程予以解析。
101 4

热门文章

最新文章

推荐镜像

更多
  • DNS