不,AES(Rijndael)涉及GF(2 ^ m)算术,而不是整数算术。你不应该使用BigIntegers - 整数算术与GF(2 ^ m)算术非常不同(整数有载荷,有限域没有)。
如果你真的想知道如何进行GF(2 ^ m)算术,那么原始Rijndael论文的数学预备部分有一个很好的教程: http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf 。您可以在位数组中实现此功能,或者对于那些在字节内的第四位映射时感到困惑的字节数组。但是对于上帝的爱,请不要使用BigIntegers!
但是,您不需要了解GF(2 ^ m)来实现AES / Rinjdael。你不需要做GF(2 ^ m)arithemtic来计算Rijndael的S-box,而是通过预先计算的表使用表查找。这就是它几乎总是在实践中实施的方式。此外,MixColumn非常简单,因为在最复杂的情况下,你只需要乘以x + 1,因此最多只需要一个mod减少(如果最终得到x ^ 8,那么只需减去不可约多项式,在AES中是x ^ 8 + x ^ 4 + x ^ 3 + x + 1。
例:
(x^7 + x^3 + 1)*(x+1) = (x^7 + x^3 + 1)*x + (x^7 + x^3 + 1)*1 = (x^8 + x^4 + x) + (x^7 + x^3 + 1) = x^8 + x^7 + x^4 + x^3 + x + 1
由于前导项是x ^ 8,你必须减去x ^ 8 + x ^ 4 + x ^ 3 + x + 1:
(x^8 + x^7 + x^4 + x^3 + x + 1) - (x^8 + x^4 + x^3 + x + 1) = x^7
那个没有以负数结束,但-1与GF(2 ^ m)中的+1相同,因此任何负数系数都会变为正电荷。
当你实现它时,乘以x只是多项式的位表示的左移,而减法只是多项式的异或表示。