GF(2^8)上的多项式乘法(Matlab实现)

一、解析/思路

Main脚本:GF(2^8)上的多项式转换为1·8的数组
Poly_2_8函数:接收多项式f,g,m,返回mod(fg,m)
拆分多项式g,分步与f相乘,并保存于矩阵T
Func1:接收多项式f与拆分的多项式gi,返回f
gi的结果
Func2:接收分步相乘的结果T,返回异或结果

二、代码

三、Main

f=[0 1 0 0 1 1 0 1];
g=[1 0 0 1 1 0 0 1];
m=[0 0 0 1 1 1 0 1];
disp(Poly_2_8(f,g,m));

1、Poly_2_8

function [ret] = Poly_2_8(f,g,m)
% f,g,m为1·8的矩阵
%Func1:二进制乘法
%Func2:异或
T=[];
G=zeros(1,8);
for i=1:8
    if(g(9-i)==1)
        G(1,9-i)=1;
        T=[T;Func1(f,G,m)];
    end
    G=0.*G;
end
ret=Func2(T);
end

2、Func1

function [ret] = Func1(f,g,m)
[a,b]=find(g==1);
for i=1:8-b
    temp=f(1);
    f(1:7)=f(2:8);
    f(8)=0;
    if(temp==1)
        f=xor(f,m);
    end
end
ret=f;
end

3、Func2

function [ret] = Func2(T)
ret=T(1,:);
temp=size(T);
for i=2:temp(1)
    ret=xor(ret,T(i,:));
end
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中实现有限域GF(2^8)内乘法,可以使用多项式乘法的方式来实现。具体的原理如下: 在GF(2^8)内,多项式的系数只能取0或1,也就是说,一个8位的二进制数可以表示为一个8次多项式。例如,二进制数11011001可以表示为多项式x^7 + x^6 + x^4 + x^3 + 1。 GF(2^8)内的乘法可以通过多项式乘法实现。例如,如果我们要计算多项式x^7 + x^6 + x^4 + x^3 + 1和多项式x^3 + x^2 + x,则可以将它们相乘得到一个15次多项式,然后将其对一个特定的生成多项式g(x)取模,得到的余数就是它们在GF(2^8)内的乘积。通常,生成多项式g(x)的系数是一个二进制数,例如,g(x) = x^8 + x^4 + x^3 + x + 1,可以表示为二进制数100011101。 下面是一个Python实现有限域GF(2^8)内乘法的代码示例: ```python def gf_mul(a, b): p = 0 for i in range(8): if b & 1: p ^= a hi_bit_set = a & 0x80 a <<= 1 if hi_bit_set: a ^= 0x1b b >>= 1 return p % 256 def gf_pow(x, power): res = 1 while power > 0: if power & 1: res = gf_mul(res, x) x = gf_mul(x, x) power >>= 1 return res def gf_div(a, b): if b == 0: raise ZeroDivisionError() p = gf_pow(b, 254) return gf_mul(a, p) a = 0x57 b = 0x83 print(hex(gf_mul(a, b))) # 输出0xc1 ``` 在这个示例中,我们定义了三个函数:gf_mul()、gf_pow()和gf_div()。gf_mul()函数实现GF(2^8)内的乘法gf_pow()函数实现了幂运算,gf_div()函数实现了除法运算。其中,gf_mul()函数使用了在GF(2^8)内进行乘法运算的方法,gf_pow()函数使用了快速幂算法,gf_div()函数使用了GF(2^8)内的除法运算的方法。 在实际应用中,有限域GF(2^8)内的乘法和幂运算是常用的操作,例如在AES加密算法中,就使用了GF(2^8)内的乘法和幂运算来实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值