GF(2^8)有限域的加法与乘法纯C语言的两种实现方式

GF(2^8)这是啥我就不多做解释了,某度某科与各位大佬的博客都有写,,,,

加法运算,超级简单,就是一个异或运算就解决了,这里主要说下乘法运算。

我们先规定下这里的模乘的不可约多项式为m=x^8+x^4+x^3+x+1

我说下在这里我的做法:

因为是二进制上的转化,所以我们可以先将输入的两个十六进制串转化为二进制,转化完后对它们进行乘法运算(下面会有样例)得到多项式mx,然后找到最高幂的次数,比较一下与8的差值,得到差c,再将不可约多项式乘上x^c,再与mx进行异或运算,再寻找下一个最高项的指数,重复以上运算,直到出现最高项的指数小于8。然后就得到了答案。

例如:0x57*0x83=x^13+x^11+x^9+x^8+x^6+x^5+x^4+x^3+x+1,                用二进制表示:010101101111011

第一次:最高幂为13,13-8=5,所以将m*x^5=x^13+x^9+x^8+x^6+x^5     用二进制表示:010001101100000

异或得到 000100000011011即多项式:x^11+x^4+x^3+x+1

第二次:最高幂为11,11-8=3,所以将m*x^3=x^11+x^7+x^6+x^4+x^3  二进制表示:000100011011000

异或得到:00000001100001即多项式:x^7+x^6+1,

第三次:最高幂为7小于8,不满足,取模结束

得到答案用十六进制表示为0xC1

经过运算暂未发现错误答案,若发现,还望各位大佬告知,菜鸡在此感谢万分

实现代码:

///2的8次方有限域内的加乘
///指定x^8+x^4+x^3+x+1为不可约多项式
///加法原理:异或操作
///乘法原理:循环操作,具体看过程
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#define ll l
  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值