AES加密原理

 

 

AES是一个迭代的、分组密码加密方式,可以使用128 、192和256位密钥。与 公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。

通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结 构,在该循环中重复置换(permutation)和替换(substitution)输入数据,加之  算法本身复杂的加密过程,使得该算法成为数据加密领域的主流。AES加密算法 流程如图6-12所示。

在AES算法中,每一次变换操作产生的中间结果称为状态。将状态表示为二 维字节数组(每个元素为一个字节),包括4行,Nb列。Nb等于数据块长度除以 32 。例如,数据块长度为128时,Nb=4;数据块长度为192时,Nb=6 。同理,密 钥也可表示为二维字节数组(每个元素为一个字节),包括4行,Nk列。Nk等于 密钥块长度除以32。

圈密钥根据圈密钥产生算法由用户密钥产生。圈密钥加密由密钥扩展和圈密 钥选择两步完成。首先将用户的密钥进行密钥扩展,再从扩展密钥中选出圈密

钥。第一个圈密钥由扩展密钥中的前Nb个字组成,第二个圈密钥由接下来的Nb个 字组成,以此类推。最后获得的圈密钥位总数为数据块长度与圈数加l的乘积。

 

 

 

 

 

52ce919ccc7744a3956eafb40babf2c8.png

图6-12    AES加密算法流程

RIJNDAEL算法的迭代圈数Nr由Nb和Nk共同决定,可根据表6-2获得相应Nr 的值。

表6-2    RIJNDAEL算法迭代圈数Nr

3dc0819c497f44a5b7d682e5c088df6d.png

AES加密算法的轮函数采用代替/置换网络结构,包括S盒变换(ByteSub)、 行移位变换(ShiftRow)、列混合变换(MixColumn)、圈密钥加变换

(AddRoundKey)。下面介绍各种变换方式。

 

 

 

 

 

S盒变换是按字节进行的代替变换,是作用在状态中每个字节上的一种非线  性字节变换。首先将字节的值用它的乘法逆来代替,然后将获取的值按式(6-1) 进行仿射变换。

e4bc77651ef3412bb44331dabad6a94f.png

2.行移位变换

行移位变换对状态行进行循环移位。在行移位变换中,状态的后三行以不同 的移位值循环左移。第0行不移位,第1行向左移动C1字节,第2行向左移动C2字 节,第3行向左移动C3字节,移位表如表6-3所示。

表6-3    移位表

53b3e3a12243430297b3a29aa2a419a3.png

3.列混合变换

列混合变换是对状态的列进行混合变换。把状态中的每一列看作GF(28)上 的多项式,并与一个固定多项式c(x )相乘,然后与多项式x4+1进行取模运算,

其中c(x )可表示为

7894432598d749d2b9686798a259df7c.png

4. 圈密钥加变换

圈密钥加变换是利用圈密钥对状态进行模2相加的变换。圈密钥被简单地异

 

 

 

 

 

或到状态中去。其中,圈密钥长度等于数据块长度。

综上所述,AES加密算法由三部分组成:初始圈密钥加、Nr-l圈的标准轮函 数、最后一圈的非标准轮函数。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450922.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3项目中如何实现图片的二次处理

在说这个之前,我们要先理解图片的二次处理与图片压缩之间的差异。 图片的二次处理除了对图片进行压缩,还可以进行更多特效的处理,可以对图片进行宽高的重设,图像位置适应性调整,清晰的的控制,背景颜色的添…

90.网游逆向分析与插件开发-游戏窗口化助手-项目需求与需求拆解

内容参考于:易道云信息技术研究院VIP课 上一个内容:实现物品使用策略的功能-CSDN博客 项目需求: 在游戏窗口化时,可以在游戏之外弹出一个窗口,可以隐藏或者显示游戏窗口,显示游戏人物的基本状态&#xff…

CMake生成osg的FFMPEG插件及Windows下不生成VS工程问题解决

在Windows下,如何利用CMake生成osg的FFMPEG插件,请参考如下博文,同生成jpeg插件类似: osg第三方插件的编译方法(以jpeg插件来讲解)。 如下为生成FFMPEG时必要的设置: 注意: 一定要…

【蓝桥杯】环形链表的约瑟夫问题

目录 题目描述: 输入描述: 输出描述: 示例1 解法一(C): 解法二(Cpp): 正文开始: 题目描述: 据说著名犹太历史学家 Josephus 有过以下故事&a…

指针详解(3)

各位少年,大家好,我是博主那一脸阳光,今天介绍 二级指针 指针数组,还有个指针数组模拟二维数组。 前言:在浩瀚的C语言编程宇宙中,指针犹如一把打开内存世界大门的独特钥匙,它不仅是理解程序运行…

红日靶场1搭建渗透

环境搭建 下载好镜像文件并解压,启动vmware 这里我用自己的win7 sp1虚拟机作为攻击机,设置为双网卡NAT,vm2 其中用ipconfig查看攻击机ip地址 设置win7 x64为双网卡,vm1,vm2 设置win08单网卡vm1,win2k3为单…

抖音下载emoji表情包

1.效果如图所示 2.代码如下 注意替换自己的cookie import requests import json import osurl "https://www.douyin.com/aweme/v1/web/emoji/list?device_platformwebapp&aid6383&channelchannel_pc_web&publish_video_strategy_type2&pc_client_type1…

20240203在WIN10下安装Miniconda

20240203在WIN10下安装Miniconda 2024/2/3 21:06 缘起:最近学习stable-diffusion-webui.git,在Ubuntu20.04.6下配置SD成功。 不搞精简版本:Miniconda了。直接上Anacoda! https://www.toutiao.com/article/7222852915286016544/ 从…

【实战知识】使用Github Action + Nginx实现自动化部署

大家好啊,我是独立开发豆小匠。 先说一下背景~ 我的小程序:豆流便签,目前使用云托管部署后端服务,使用轻量级服务器部署数据库和一些中间件。 因此服务器成本:云托管 + 云服务器 云托管每周花费5元,一个月就是50,一年就是500啊,所以这期准备把云托管优化掉! 1. 需…

STM32--SPI通信协议(1)SPI基础知识总结

前言 I2C (Inter-Integrated Circuit)和SPI (Serial Peripheral Interface)是两种常见的串行通信协议,用于连接集成电路芯片之间的通信,选择I2C或SPI取决于具体的应用需求。如果需要较高的传输速度和简单的接口,可以选择SPI。如果需要连接多…

评论区功能的简单实现思路

评论区功能是社交类项目中的核心组成部分,它涉及到前端的交云和后端的数据处理。基于你的技术栈(前端 Vue3,后端 Java),下面是一个具体的实现思路和数据库设计建议,并探索一下知乎的评论系统。 数据库设计…

ChatGPT实战100例 - (15) 还不会写 Stable Diffusion (SD) 绘画提示词?没关系,ChatGPT帮你搞定

文章目录 ChatGPT实战100例 - (15) 还不会写 Stable Diffusion (SD) 绘画提示词?没关系,ChatGPT帮你搞定一、把场景描述转为镜头语言二、把镜头语言转换为Prompt三、把Prompt转换为图片 ChatGPT实战100例 - (15) 还不会写 Stable Diffusion (SD) 绘画提示…