- 密码学教程
- 密码学 - 首页
- 密码学 - 起源
- 密码学 - 历史
- 密码学 - 原理
- 密码学 - 应用
- 密码学 - 优点与缺点
- 密码学 - 现代密码学
- 密码学 - 传统密码
- 密码学 - 加密的需求
- 密码学 - 双重强度加密
- 密码系统
- 密码系统
- 密码系统 - 组成部分
- 密码系统的攻击
- 密码系统 - 彩虹表攻击
- 密码系统 - 字典攻击
- 密码系统 - 暴力攻击
- 密码系统 - 密码分析技术
- 密码学的类型
- 密码系统 - 类型
- 公钥加密
- 现代对称密钥加密
- 密码学哈希函数
- 密钥管理
- 密码系统 - 密钥生成
- 密码系统 - 密钥存储
- 密码系统 - 密钥分发
- 密码系统 - 密钥撤销
- 分组密码
- 密码系统 - 流密码
- 密码学 - 分组密码
- 密码学 - Feistel分组密码
- 分组密码的工作模式
- 分组密码的工作模式
- 电子密码本 (ECB) 模式
- 密码分组链接 (CBC) 模式
- 密码反馈 (CFB) 模式
- 输出反馈 (OFB) 模式
- 计数器 (CTR) 模式
- 古典密码
- 密码学 - 反向密码
- 密码学 - 凯撒密码
- 密码学 - ROT13 算法
- 密码学 - 置换密码
- 密码学 - 加密置换密码
- 密码学 - 解密置换密码
- 密码学 - 乘法密码
- 密码学 - 仿射密码
- 密码学 - 简单替换密码
- 密码学 - 简单替换密码的加密
- 密码学 - 简单替换密码的解密
- 密码学 - 维吉尼亚密码
- 密码学 - 维吉尼亚密码的实现
- 现代密码
- Base64 编码和解码
- 密码学 - XOR 加密
- 替换技术
- 密码学 - 单表替换密码
- 密码学 - 单表替换密码的破解
- 密码学 - 多表替换密码
- 密码学 - Playfair 密码
- 密码学 - Hill 密码
- 多表替换密码
- 密码学 - 一次性密码本密码
- 一次性密码本密码的实现
- 密码学 - 置换技术
- 密码学 - 栅栏密码
- 密码学 - 列置换密码
- 密码学 -隐写术
- 对称算法
- 密码学 - 数据加密
- 密码学 - 加密算法
- 密码学 - 数据加密标准 (DES)
- 密码学 - 三重 DES
- 密码学 - 双重 DES
- 高级加密标准 (AES)
- 密码学 - AES 结构
- 密码学 - AES 变换函数
- 密码学 - 字节替换变换
- 密码学 - 移行变换
- 密码学 - 列混淆变换
- 密码学 - 轮密钥加变换
- 密码学 - AES 密钥扩展算法
- 密码学 - Blowfish 算法
- 密码学 - SHA 算法
- 密码学 - RC4 算法
- 密码学 - Camellia 加密算法
- 密码学 - ChaCha20 加密算法
- 密码学 - CAST5 加密算法
- 密码学 - SEED 加密算法
- 密码学 - SM4 加密算法
- IDEA - 国际数据加密算法
- 公钥(非对称)密码算法
- 密码学 - RSA 算法
- 密码学 - RSA 加密
- 密码学 - RSA 解密
- 密码学 - 创建 RSA 密钥
- 密码学 - 破解 RSA 密码
- 密码学 - ECDSA 算法
- 密码学 - DSA 算法
- 密码学 - Diffie-Hellman 算法
- 密码学中的数据完整性
- 密码学中的数据完整性
- 消息认证
- 密码学数字签名
- 公钥基础设施 (PKI)
- 哈希算法
- MD5(消息摘要算法 5)
- SHA-1(安全哈希算法 1)
- SHA-256(安全哈希算法 256 位)
- SHA-512(安全哈希算法 512 位)
- SHA-3(安全哈希算法 3)
- 哈希密码
- Bcrypt 哈希模块
- 现代密码学
- 量子密码学
- 后量子密码学
- 密码协议
- 密码学 - SSL/TLS 协议
- 密码学 - SSH 协议
- 密码学 - IPsec 协议
- 密码学 - PGP 协议
- 图像和文件加密
- 密码学 - 图像
- 密码学 - 文件
- 隐写术 - 图像
- 文件加密和解密
- 密码学 - 文件加密
- 密码学 - 文件解密
- 物联网中的密码学
- 物联网安全挑战、威胁和攻击
- 物联网安全的密码技术
- 物联网设备的通信协议
- 常用的密码技术
- 自定义构建密码算法(混合密码学)
- 云密码学
- 量子密码学
- 密码学中的图像隐写术
- DNA 密码学
- 密码学中的一次性密码 (OTP) 算法
- 区别
- 密码学 - MD5 与 SHA1 的比较
- 密码学 - RSA 与 DSA 的比较
- 密码学 - RSA 与 Diffie-Hellman 的比较
- 密码学与密码学的比较
- 密码学 - 密码学 vs 密码分析
- 密码学 - 古典密码学与量子密码学的比较
- 密码学与隐写术的比较
- 密码学与加密的比较
- 密码学与网络安全的比较
- 密码学 - 流密码与分组密码的比较
- 密码学 - AES 与 DES 密码的比较
- 密码学 - 对称加密与非对称加密的比较
- 密码学有用资源
- 密码学 - 快速指南
- 密码学 - 讨论
密码学 - 移行变换
AES 中对称加密方法的一个线性单元是移行变换。它是一种转置运算,其中状态的行被多次重复移动。此函数的目的是通过随机排列每个 128 位块中的位来提供跨多个轮次的位扩散。
由于这种变换,状态行按如下方式移动:第一行保持不变,第二行向左移动一个字节,第三行向左移动两个字节,最后一行向左移动三个字节。
没有移行阶段的 AES 比 AES 更强;它们在轮次中的值几乎没有变化。这归因于较差的加密质量。
AES 算法中最困难的部分是线性密码分析和差分密码分析,其中两种方法的常用方法都可以用来解决 Rijndael。
根据对抵抗差分和线性密码分析的抵抗力的分析,认为任意未知和密钥相关的替换和置换变换是增强分组密码抵抗差分和线性攻击能力的一个良好因素,因为这些攻击需要已知的变换。
它是如何工作的?
高级加密标准 (AES) 算法的组成部分之一是移行变换。它是数据加密过程中的一个步骤。AES 状态是字节网格,在此阶段,行被循环移动。让我们简化它 -
- 状态矩阵 - 数据由 AES 算法排列成状态矩阵,这是一个字节网格。通常,此矩阵中有四行四列。
- 移行步骤 - 在此阶段,状态矩阵中每一行的字节都向左移动。第一行没有移动。第二行向左移动了一个位置,第三行向左移动了两个位置,第四行向左移动了三个位置。由于此移动是循环进行的,因此从一行一端移出的字节将被放回另一端。
示例 - 让我们使用以下状态矩阵为例 -
0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10
移行阶段之后,它变成 -
0x01 0x02 0x03 0x04 0x06 0x07 0x08 0x05 0x0B 0x0C 0x09 0x0A 0x10 0x0D 0x0E 0x0F
如您所见,每一行都向左移动了特定数量的位置。
- 目的 - 移行阶段通过将扩散包含到加密过程中来增加识别数据中模式的难度。
使用 Python 实现
代码中定义的 shift_rows 函数用于在高级加密标准 (AES) 算法的上下文中实现移行变换。shift_rows 函数以状态矩阵作为输入,执行移行变换,并输出更改后的状态矩阵。
示例
def shift_rows(state): for i in range(1, 4): state[i] = state[i][i:] + state[i][:i] return state # function execution state_matrix = [ [0x01, 0x02, 0x03, 0x04], [0x05, 0x06, 0x07, 0x08], [0x09, 0x0A, 0x0B, 0x0C], [0x0D, 0x0E, 0x0F, 0x10] ] shifted_state = shift_rows(state_matrix) for row in shifted_state: print(' '.join(format(x, '02X') for x in row))
以下是上述示例的输出 -
输入/输出
01 02 03 04 06 07 08 05 0B 0C 09 0A 10 0D 0E 0F
使用 Java 实现
这段 Java 代码展示了如何在 AES 加密算法的上下文中应用移行变换,方法是更改状态矩阵。它还提供了更改的有效实现。请参见下面的代码 -
示例
// AES Class for shiftrows transformation public class AES { public static byte[][] shiftRows(byte[][] state) { for (int i = 1; i < 4; i++) { byte[] temp = new byte[4]; for (int j = 0; j < 4; j++) { temp[j] = state[i][(j - i + 4) % 4]; } state[i] = temp; } return state; } // Main function public static void main(String[] args) { byte[][] stateMatrix = { {0x01, 0x02, 0x03, 0x04}, {0x05, 0x06, 0x07, 0x08}, {0x09, 0x0A, 0x0B, 0x0C}, {0x0D, 0x0E, 0x0F, 0x10} }; byte[][] shiftedState = shiftRows(stateMatrix); for (byte[] row : shiftedState) { for (byte b : row) { System.out.print(String.format("%02X ", b)); } System.out.println(); } } }
以下是上述示例的输出 -
输入/输出
01 02 03 04 08 05 06 07 0B 0C 09 0A 0E 0F 10 0D
使用 C++ 实现
这段 C++ 代码演示了移行变换,这是 AES 加密过程中的一个重要阶段。C++ 向量和 std::rotate 函数用于执行循环左移。以下是使用 C++ 的实现 -
示例
#include <iostream> #include <vector> #include <algorithm> // Include the algorithm header std::vector<std::vector<int>> shiftRows(std::vector<std::vector<int>> state) { for (int i = 1; i < 4; i++) { std::rotate(state[i].begin(), state[i].begin() + i, state[i].end()); } return state; } int main() { std::vector<std::vector<int>> stateMatrix = { {0x01, 0x02, 0x03, 0x04}, {0x05, 0x06, 0x07, 0x08}, {0x09, 0x0A, 0x0B, 0x0C}, {0x0D, 0x0E, 0x0F, 0x10} }; auto shiftedState = shiftRows(stateMatrix); for (const auto& row : shiftedState) { for (int val : row) { std::cout << std::hex << val << " "; } std::cout << std::endl; } return 0; }
以下是上述示例的输出 -
输入/输出
1 2 3 4 6 7 8 5 b c 9 a 10 d e f
总结
本章介绍了移行变换,这是称为高级加密标准 (AES) 的对称加密过程中的一个重要阶段。AES 加密中的移行变换需要循环移动状态矩阵的行。本章还包括使用 Python、Java 和 C++ 的移行变换的实现,演示了如何使用各种编程语言和方法在 AES 加密的上下文中应用它。