200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 密码学实验_3_GF有限域上的多项式乘法(python 实现)

密码学实验_3_GF有限域上的多项式乘法(python 实现)

时间:2021-02-22 09:46:09

相关推荐

密码学实验_3_GF有限域上的多项式乘法(python 实现)

文章目录

效果代码

效果

代码

import pandas as pdclass poly():def __init__(self, s: str):self.s = sself.poly, self.length = self.__str2poly(s)# target: 接收字符串,返回其列表形式# params: 字符串# return: 字符串列表形式及其长度def __str2poly(self, s)-> list:return list(pd.Series(list(s)).map(int)), len(s)class poly_opera():def __init__(self, mx='1000011011'):self.mx = poly(mx)self .m = self.add(self.mx, poly(''.join(['1',*((self.mx.length-1) * ['0'])])))# target: 设置mx# params: mx# return: 无def set_mx(self, mx):self.mx = poly(mx)self .m = self.add(self.mx, poly(''.join(['1',*((self.mx.length-1) * ['0'])])))# target: 两多项式相加# params: 多项式0,多项式1# return: 多项式之和def add(self, poly0, poly1):poly0_lt = poly0.polypoly1_lt = poly1.polyalign_lt = [0] * abs(poly0.length-poly1.length)if(poly0.length-poly1.length>=0):align_lt.extend(poly1_lt)poly1_lt = align_ltelse:align_lt.extend(poly0_lt)poly0_lt = align_ltxor_res_lt = list((pd.Series(poly0_lt) ^ pd.Series(poly1_lt)).map(str))return poly(str(int(''.join(xor_res_lt))))# target: 计算poly0与x^i的乘积# params: poly0# return: poly0与x^i的乘积多项式列表def __single_multi(self, poly0):ret = [poly0]for i in range(self.mx.length-2):if(ret[-1].length==self.mx.length-2):temp_poly_s = poly(ret[-1].s[1:] + '0')ret.append(self.add(temp_poly_s, self.m))else:temp_poly_s = poly(ret[-1].s[:] + '0')ret.append(temp_poly_s)return ret# target: 计算poly0与poly0的乘积# params: poly0,poly1# return: 两多项式之积def multi(self, poly0, poly1):poly1_lt = poly1.polypoly1_lt.reverse()poly0_single = self.__single_multi(poly0)ret = poly('0')for i in range(len(poly1_lt)):if(poly1_lt[i]==1):ret = self.add(ret, poly0_single[i])return retif __name__=='__main__':mx = '100011101'fx = '1001101'gx = '10011001'poly0 = poly(fx)poly1 = poly(gx)p = poly_opera(mx)p_ret = p.multi(poly0, poly1)print("m(x) = %s" % p.mx.s)print("f(x) = %s" % poly0.s)print("g(x) = %s" % poly1.s)print("f(x)*g(x) = %s" % p_ret.s)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。