SAGE中GF(256)乘法d4*02计算结果与预期不符问题求解
问题原因
你在创建GF(256)有限域时没有指定AES MixColumns操作对应的不可约多项式,Sage默认的GF(256)本原多项式和AES规范所用的多项式不一致,导致最终模运算结果不符合预期。
AES规范中GF(256)使用的不可约多项式为:x^8 + x^4 + x^3 + x + 1,而Sage默认的GF(256)本原多项式为x^8 + x^4 + x^3 + x^2 + 1,二者模运算的结果存在差异。
正确实现代码
# 先定义二元多项式环,指定AES所用的不可约多项式 R.<x> = PolynomialRing(GF(2)) aes_modulus = x^8 + x^4 + x^3 + x + 1 k.<a> = GF(256, modulus=aes_modulus, repr='int') # d4对应二进制11010100 = a^7 + a^6 + a^4 + a^2 d4 = a^7 + a^6 + a^4 + a^2 # 02对应a,执行乘法 result = d4 * a print(result) # 输出179 print(bin(result)) # 输出0b10110011,和预期二进制结果完全匹配
补充说明
你之前输出的181是使用Sage默认本原多项式计算得到的结果,只要手动指定AES对应的模多项式即可得到正确结果。
内容的提问来源于stack exchange,提问作者Juan
相关产品推荐
相关产品推荐

