【问题标题】:Multiplication over GF(256) in SAGESAGE 中对 GF(256) 的乘法
【发布时间】:2021-10-28 13:34:11
【问题描述】:

我正在尝试重现此question 对 GF(256) 的乘法。具体来说,我在鼠尾草中尝试 d4*02 。根据作者的说法,这个乘法是????????????????????????????????????。我在 Sage 中尝试过

 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不等于??????????????????????????????????。我做错了什么?你能帮帮我吗?

【问题讨论】:

    标签: sage


    【解决方案1】:

    您需要为有限域构造函数提供正确的 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))
    

    或者,您可以使用列表和字典将整数与字段元素相互转换。以下代码从链接的问题中进行第二次乘法。

    # 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 0xda
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多