我必须在 GF (2 4 )中编写一个查找乘法逆的表。我已经写出了乘法表,我并不期待再次这样做。这是我写的一个例子。我希望没有人再写这个。我觉得很蠢。
GF 上的乘法表(2 4 )
// Multiplication table over Galois Field 2^4
byte mulTable[][] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf},
{0, 2, 4, 6, 8, 0xa, 0xc, 0xe, 3, 1, 7, 5, 0xb, 9, 0xf, 0xd},
{0, 3, 6, 5, 0xc, 0xf, 0xa, 9, 0xb, 8, 0xd, 0xe, 7, 4, 1, 2},
{0, 4, 8, 0xc, 3, 7, 0xb, 0xf, 6, 2, 0xe, 0xa, 5, 1, 0xd, 9},
{0, 5, 0xa, 0xf, 7, 2, 0xd, 8, 0xe, 0xb, 4, 1, 9, 0xc, 3, 6},
{0, 6, 0xc, 0xa, 0xb, 0xd, 7, 1, 5, 3, 9, 0xf, 0xe, 8, 2, 4},
{0, 7, 0xe, 9, 0xf, 8, 1, 6, 0xd, 0xa, 3, 4, 2, 5, 0xc, 0xb},
{0, 8, 3, 0xb, 6, 0xe, 5, 0xd, 0xc, 4, 0xf, 7, 0xa, 2, 9, 1},
{0, 9, 1, 8, 2, 0xb, 3, 0xa, 4, 0xd, 5, 0xc, 6, 0xf, 7, 0xe},
{0, 0xa, 7, 0xd, 0xe, 4, 9, 3, 0xf, 5, 8, 2, 1, 0xb, 0xc, 6},
{0, 0xb, 5, 0xe, 0xa, 1, 0xf, 4, 7, 0xc, 2, 9, 0xd, 6, 8, 3},
{0, 0xc, 0xb, 7, 5, 9, 0xe, 2, 0xa, 6, 1, 0xd, 0xf, 3, 4, 8},
{0, 0xd, 9, 4, 1, 0xc, 8, 5, 2, 0xf, 0xb, 6, 3, 0x3, 0xa, 7},
{0, 0xe, 0xf, 1, 0xd, 3, 2, 0xc, 9, 7, 6, 8, 4, 0xa, 0xb, 5},
{0, 0xf, 0xd, 2, 9, 6, 4, 0xb, 1, 0xe, 0xc, 3, 8, 7, 5, 0xa}
};
我不想再为逆转而这样做了!
有没有人知道适合复制和粘贴的表(最好是Java或C 16x16数组)?我搜索了github试图找到一个已经写好的,但没有快乐。
动机/理性
我不必严格查看表格,但我不想添加一百行代码只是为了动态生成字段(这只是一个估计,但我怀疑我能不能做到这一点。
答案 0 :(得分:1)
乘法表表示二进制运算" *":x * y = z当且仅当mulTable [x] [y] == z
元素x的倒数是另一个元素y,使得x * y = 1,等价于mulTable [x] [y] == 1.有时反转不存在。对于这个二进制运算,0的倒数不存在。在此背景下,以下代码仅使用您提供的乘法表计算反转表。
public static byte[] computeInverseTable() {
byte [] inverseTable = new byte[16];
inverseTable[0] = 0; // the inverse of 0 doesn't exist.
for (int x = 1; x<16; x++) {
for (int y = 1; y<16; y++) {
if (mulTable[x][y] == 1) {
inverseTable[x] = (byte) y;
break;
}
}
}
return inverseTable;
}
答案 1 :(得分:0)
此问题表明您没有正确理解问题。在你的标签中你提到加密。
只有一种加密算法(我知道)使用 GF (2 4 )。该算法是圣克拉拉大学的Simplified-AES algorithm developed by Professor Edward Schaefer和他的几个学生。你应该研究那些材料并理解算法。
你可能已经注意到你在上花费的时间>了解该算法从未包含分词。 所以你不需要反转。算法进行乘法运算的唯一地方是mixColums函数,你已经有了一个乘法表。 mixColumns的反转不会分割或需要反转,它只是使用不同的2x2矩阵。
如果你确实需要划分你不能使用乘法表来找到逆?
......这个反转表会是什么样子?它会是16x16吗?
现在下车,然后回去学习。