在有限域GF(2^n)下求多项式乘法 Python代码实现

#在有限域GF(2^n)下求多项式乘法 Python代码实现
一、了解运算规则
在有限域GF(2^n)下求多项式乘法 Python代码实现_第1张图片
在有限域GF(2^n)下求多项式乘法 Python代码实现_第2张图片
二、例题展示
在有限域GF(2^n)下求多项式乘法 Python代码实现_第3张图片
三、直接上代码(代码有详细备注,不做一一解释)

def yxydxscf(a,b,c):
    # 不可约多项式系数模二运算
    c = str(c)[1:]
    # 不够8位左补零
    g = str(a).rjust(8, '0')
    h = str(b).rjust(8, '0')
    k = str(c).rjust(8, '0')
    # 二进制转十进制
    d = int(str(a), 2)
    # e = int(str(b), 2)
    f = int(str(k), 2)
    # 存放g(x)多项式的每一项二进制表示
    X = []
    if h[0] == '1':
        x = ['10000000']
        X += x
    if h[1] == '1':
        x1 = ['01000000']
        X += x1
    if h[2] == '1':
        x2 = ['00100000']
        X += x2
    if h[3] == '1':
        x3 = ['00010000']
        X += x3
    if h[4] == '1':
        x4 = ['00001000']
        X += x4
    if h[5] == '1':
        x5 = ['00000100']
        X += x5
    if h[6] == '1':
        x6 = ['00000010']
        X += x6
    if h[7] == '1':
        x7 = ['00000001']
        X += x7
    # 存放g(x)每一项与f(x)的乘法运算后十进制结果
    E = []
    for i in range(len(X)):  # 求g(x)每一项与f(x)的乘法运算
        G = X[i]
        # print(G)
        e1 = int(G, 2)
        d1 = d
        while e1 != 0:
            if e1 == 1:
                E += [d1]
                break
                # print(E)
            if g[0] == '1':
                d1 = d1 << 1
                z = d1 ^ f
                d1 = z
                g1 = bin(d1)
                g2 = g1[2:]
                g2 = g2[::-1]
                g3 = g2[0:8]
                g3 = g3[::-1]
                g = str(g3).rjust(8, '0')
                d1 = int(g, 2)
            else:
                d1 = d1 << 1
                g1 = bin(d1)
                g2 = g1[2:]
                g2 = g2[::-1]
                g3 = g2[0:8]
                g3 = g3[::-1]
                g = str(g3).rjust(8, '0')
                d1 = int(g, 2)
            e1 = e1 >> 1
    a = 0
    for j in range(len(E)):  # 每一项算完之后的加法运算得到最终结果
        b = E[j]
        a = int(a)
        b = int(b)
        c = a ^ b
        g1 = bin(c)
        g2 = g1[2:]
        g2 = g2[::-1]
        g3 = g2[0:8]
        g3 = g3[::-1]
        g = str(g3).rjust(8, '0')
        c = int(g, 2)
        a = c
    return bin(a)


if __name__ == '__main__':
    a = input('请输入f(x)的二进制表示:')
    b = input('请输入g(x)的二进制表示:')
    c = input('请输入m(x)的二进制表示(注意m(x)的二进制应该为9位):')
    print('f(x)*g(x)在有限域GF(2^8),''m(x)',c,'为:','\n',yxydxscf(a,b,c))

四、代码运行测试
在有限域GF(2^n)下求多项式乘法 Python代码实现_第4张图片
五、结果解释
由结果可知:
所得二进制"11000001"是例题答案 x^7 + x^6 + 1的二进制展示

你可能感兴趣的:(GF(2^n)多项式乘法,python,算法)