【发布时间】:2011-02-11 00:55:31
【问题描述】:
所以我们都同意密钥是 128 位或 192 位或 256 位的固定长度。如果我们的上下文是 50 个字符的大小(字节)% 16 = 2 个字节。所以我们对上下文进行了 3 次加密,但剩下的两个字节将如何存储在 State 块中。我应该填充它们,标准没有指定如何处理这些情况。
MixColumns 阶段是 AES 中最复杂的方面,但是我一直无法理解数学表示。我对矩阵乘法有所了解,但我对数学结果感到惊讶。将一个值乘以 2,左移小端 1 位置,右移大端。如果我们将最高有效位设置为 1 (0x80),那么我们应该将移位结果与 0x1B 进行异或。我认为乘以 3 意味着将值移动 2 个位置。
我查看了 Wikipedia 上的各种资源,甚至包括提供 C 实现的教程。但我更感兴趣的是完成我自己的实现!感谢您提供任何可能的意见。
【问题讨论】:
-
您需要乘以或除以 4 才能移动两位。
-
AES 只是分组密码。如果要加密实际数据,则必须选择合适的 模式,例如 CBC(密码块链接)或 CTR(计数器模式)。 CBC是块模式,所以你需要想出一些合适的填充方式(由你决定); CTR 是一种流模式,因此您可以加密任意数量的字节。
标签: c++ cryptography aes