我正在尝试组合一个加密算法,但我遇到了以下问题,我什至不知道它是否应该是这样的!
问题:
我有 16 字节矩阵要乘以 [16,16] 矩阵,结果是一个 16 字节矩阵。
然后我应该将结果矩阵乘以逆,在这里我想我应该得到原始的 16 字节矩阵(根据算法数据表)。
那么你能告诉我如何取回原始矩阵吗?
感谢您提前提供帮助。
问候,
英。AWS
我正在尝试组合一个加密算法,但我遇到了以下问题,我什至不知道它是否应该是这样的!
问题:
我有 16 字节矩阵要乘以 [16,16] 矩阵,结果是一个 16 字节矩阵。
然后我应该将结果矩阵乘以逆,在这里我想我应该得到原始的 16 字节矩阵(根据算法数据表)。
那么你能告诉我如何取回原始矩阵吗?
感谢您提前提供帮助。
问候,
英。AWS
有很多方法可以完成我认为你想要的,但它们取决于一些细节。
有许多方法可以求逆矩阵(或更一般地,求解线性系统)。一些示例是高斯消除、高斯-乔丹消除和L/U 分解。您可以使用其中任何一个来解决一般线性系统A x = b
;x
要获得 A 的倒数,您需要求解A X = I
矩阵X
(I
单位矩阵在哪里)。
最重要的细节是:“乘以字节”是什么意思?你的乘法需要是有限域的一部分——在你的情况下可能是GF(256) ——否则你将无法反转它。特别是,这意味着“乘法”将不是常规的处理器原生乘法;相反,您将需要进行一些位摆弄或表查找(哪些表是由所述位摆弄预先计算的)。此外,GF(256)“加法”和“减法”实际上是按位异或(注意,这意味着它们彼此相同)。
另一件事:由于您使用的是有限域,我认为您无需担心旋转。解释一下:如果您使用浮点,您的线性系统求解器将需要选择执行其基本步骤的顺序,以防止浮点误差以指数方式累积(您还希望避免实际计算逆矩阵,在倾向于对每个向量使用线性系统求解器)。这种排序选择称为“枢轴”,大多数关于线性求解器的参考资料都非常关注它。
但是,由于有限域数学是精确的,因此您无需担心这种不稳定性——您可以按顺序执行求解器的步骤,并构造一个精确的逆矩阵。您唯一需要检查的是您的矩阵是否是奇异的:乘以奇异矩阵会丢失信息,因此它不能反转,并且它不会是可用的加密矩阵。