java - Java 或 C 数组中的乘法逆表 GF(2^4)

标签 java encryption galois-field

我必须编写一个表格来查找 GF(24) 中的乘法逆元。我已经写出了乘法口诀表,我不希望再这样做了。这是我作为示例编写的表格。我希望没人再写这个。我觉得自己很愚蠢。

GF(24)的乘法表

// 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,试图找到一个已经写好的版本,但没有任何乐趣。

动机/理性
我并不严格要求必须进行表查找,但我不想添加一百行代码只是为了动态生成字段(这只是一个估计,但我怀疑我是否可以用更少的时间完成它)。

最佳答案

乘法表表示二元运算“*”: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;
}

关于java - Java 或 C 数组中的乘法逆表 GF(2^4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26707068/

相关文章:

java - 将 python 正则表达式转换为 java

ruby-on-rails - 用于编码 URL 的简单密码

python - 如何向数据添加填充以使其为 pycrypto 库中的 AES256 加密算法所接受

ocaml - 如何进行伽罗华域乘法?

python - 用于 Reed-Solomon 解码的 Berlekamp-Massey 勘误表(删除+错误)

java - 在JAVA中一次初始化多个以某些值开头的数字字段

java - 如何从 2 个 ArrayLists 的字符串中找出不同之处?

c - C语言中AES混合列 block 的伽罗瓦域乘法

java - 如何从文本框中自动更新字符串(在 JLabel 中)?

javascript - 如何在nodejs中使用SHA1进行加密?