我试图在这个question的GF(256)上复制乘法。具体来说,我试着在圣贤大学学习d4*02。根据作者的说法,这种乘法是。在鼠尾草里我试过
k.<a> = FiniteField(256, impl='givaro', repr='int')
print(k((a**2+a**4+a**6+a**7)*(a))) # a**2+a**4+a**6+a**7 is d4 and a is 2
181但181并不等于。我做错什么了?你能帮帮我吗?
发布于 2022-03-19 15:04:36
您需要为Rijndael给出有限域构造器的正确模数。
# Rijndael finite field
k.<a> = GF(2^8, modulus=x^8+x^4+x^3+x+1)
r = (a^7 + a^6 + a^4 + a^2) * a
v = r.integer_representation()
print(r, v, hex(v))输出
a^7 + a^5 + a^4 + a + 1 179 0xb3使用整数指定字段元素通常更方便。例如,
# Rijndael finite field
k.<a> = GF(2^8, modulus=x^8+x^4+x^3+x+1)
kint = k._cache.fetch_int
p, q = [kint(u) for u in (0xd4, 0x02)]
r = p * q
v = r.integer_representation()
print(r, v, hex(v))或者,您可以使用list和dict来将整数与字段元素相互转换。下面的代码执行链接问题的第二个乘法。
# Rijndael finite field
k.<a> = GF(2^8, modulus=x^8+x^4+x^3+x+1)
i2f = sorted(k)
f2i = {v: i for i, v in enumerate(i2f)}
p, q = [i2f[u] for u in (0xbf, 0x03)]
print(p)
print(q)
r = p * q
v = f2i[r]
print(r, v, hex(v))输出
a^7 + a^5 + a^4 + a^3 + a^2 + a + 1
a + 1
a^7 + a^6 + a^4 + a^3 + a 218 0xdahttps://stackoverflow.com/questions/69755079
复制相似问题