C语言实现乘法原理,伽罗华乘法原理与C语言实现
2.2 算法实现
接受两个unsigned char类型(1B)变量left和right,返回unsigned char类型结果,其为left和right的伽罗华乘法结果。
unsigned char find_result(unsigned char left,unsigned char right)
{
//poly数组存储是码字
unsignedchar poly[8] = {0x1d, 0x3a, 0x74, 0xe8,0xcd, 0x87, 0x13, 0x26};
unsignedchar i, bit;
unsignedshort temp = 0;//16位变量,存储中间结果,必须初始化为0
unsignedchar h_temp, l_temp;//用来存储temp的高8位和低8位
//本位相乘
for(i = 0; i < 8; i += 1)
{
bit= (right >> i) & 1; //以上例来说,从右到左获取01111001的第i+1位
if(bit)//如果第i+1位不为0
temp^= (left << i); //11010101左移i位和temp异或并存储到temp
}
//“溢出位”处理(高8位对于一字节变量[8bit]来说可称做溢出位)
h_temp =(temp & 0xff00) >> 8;//获取temp高8位
l_temp =temp & 0x00ff;//获取temp低8位
for(i =0;i < 8;i += 1)
{
bit= (h_temp >>i) & 1;
if(bit)//对于非0位进行多项式的替换并伽罗华加(^)
l_temp^= poly[i];
}
returnl_temp;
}
2.3 二位乘法和四位乘法
思想:二(四)位伽罗华乘法思想和一位是一样的。只是对应的乘法由一位一位乘变成两(四)位和两(四)位乘。为了减少重复计算,可以事前得出对应数相乘的结果。
//二位乘法
unsigned short find_result2(unsigned char left,unsigned char right)
{
//“溢出位”替换码字
unsignedchar shift[4][4] = {{0x0, 0x1d, 0x3a, 0x27},
{0x0,0x74, 0xe8, 0x9c},
{0x0,0xcd, 0x87, 0x4a},
{0x0,0x13, 0x26, 0x35}};
//乘法表
unsignedchar list[4][4] = {{0x0, 0x0, 0x0, 0x0},
{0x0,0x01, 0x02, 0x03},
{0x0,0x02, 0x04, 0x06},
{0x0,0x03, 0x06, 0x05}};
unsignedchar i, j;
unsignedshort temp = 0;
unsignedchar h_temp, l_temp;
for(i =0; i < 8; i += 2)
{
for(j= 0; j < 8; j += 2)
{
temp^= (list[(left >> j) & 3][(right >> i) & 3] << (i +j));
}
}
h_temp =(temp & 0xff00) >> 8;
l_temp =temp & 0x00ff;
for(j =0; j < 8; j += 2)
{
l_temp^= shift[j >> 1][(h_temp >> j) & 3];
}
returnl_temp;
}
//四位乘法
unsigned short find_result4(unsigned char left,unsigned char right)
{
//“溢出位”替换码字
unsignedchar shift[2][16] = {{0x0, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53,
0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6,0xbb},
{0x0, 0xcd, 0x87, 0x4a, 0x13, 0xde, 0x94,0x59,
0x26, 0xeb, 0xa1, 0x6c, 0x35, 0xf8, 0xb2,0x7f}};
//乘法表
unsignedchar list[16][16] ={
{0x0,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
{0x0,0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF},
{0x0,0x2, 0x4, 0x6, 0x8, 0xA, 0xC, 0xE, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C,0x1E},
{0x0,0x3, 0x6, 0x5, 0xC, 0xF, 0xA, 0x9, 0x18, 0x1B, 0x1E, 0x1D, 0x14, 0x17, 0x12,0x11},
{0x0,0x4, 0x8, 0xC, 0x10, 0x14, 0x18, 0x1C, 0x20, 0x24, 0x28, 0x2C, 0x30, 0x34,0x38, 0x3C},
{0x0,0x5, 0xA, 0xF, 0x14, 0x11, 0x1E, 0x1B, 0x28, 0x2D, 0x22, 0x27, 0x3C, 0x39,0x36, 0x33},
{0x0,0x6, 0xC, 0xA, 0x18, 0x1E, 0x14, 0x12, 0x30, 0x36, 0x3C, 0x3A, 0x28, 0x2E,0x24, 0x22},
{0x0,0x7, 0xE, 0x9, 0x1C, 0x1B, 0x12, 0x15, 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A,0x2D},
{0x0,0x8, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, 0x40, 0x48, 0x50, 0x58, 0x60, 0x68,0x70, 0x78},
{0x0,0x9, 0x12, 0x1B, 0x24, 0x2D, 0x36, 0x3F, 0x48, 0x41, 0x5A, 0x53, 0x6C, 0x65,0x7E, 0x77},
{0x0,0xA, 0x14, 0x1E, 0x28, 0x22, 0x3C, 0x36, 0x50, 0x5A, 0x44, 0x4E, 0x78, 0x72,0x6C, 0x66},
{0x0,0xB, 0x16, 0x1D, 0x2C, 0x27, 0x3A, 0x31, 0x58, 0x53, 0x4E, 0x45, 0x74, 0x7F,0x62, 0x69},
{0x0,0xC, 0x18, 0x14, 0x30, 0x3C, 0x28, 0x24, 0x60, 0x6C, 0x78, 0x74, 0x50, 0x5C,0x48, 0x44},
{0x0,0xD, 0x1A, 0x17, 0x34, 0x39, 0x2E, 0x23, 0x68, 0x65, 0x72, 0x7F, 0x5C, 0x51,0x46, 0x4B},
{0x0,0xE, 0x1C, 0x12, 0x38, 0x36, 0x24, 0x2A, 0x70, 0x7E, 0x6C, 0x62, 0x48, 0x46,0x54, 0x5A},
{0x0,0xF, 0x1E, 0x11, 0x3C, 0x33, 0x22, 0x2D, 0x78, 0x77, 0x66, 0x69, 0x44, 0x4B,0x5A, 0x55}};
unsignedchar l_shift = left, r_shift = right;
unsignedchar i, j;
unsignedshort temp = 0;
unsignedchar h_temp, l_temp;
for(i =0; i < 8; i += 4)
{
for(j= 0; j < 8; j += 4)
{
temp^= (list[(l_shift >> j) & 0xf][(r_shift >> i) & 0xf]<< (i + j));
}
}
h_temp =(temp & 0xff00) >> 8;
l_temp =temp & 0x00ff;
for(j =0; j < 8; j += 4)
{
l_temp^= shift[j >> 2][(h_temp >> j) & 0xf];
}
returnl_temp;
}
C语言实现乘法原理,伽罗华乘法原理与C语言实现相关推荐
- c语言实现伽罗华域乘法器,伽罗华域运算及C语言实现
伽罗华域(Galois Field)简介 在数学中,有限域(或称伽罗华域)是一个包含有限元素的域.与其他域一样,有限域是进行加减乘除运算都有定义并且满足特定规则的集合.其中加法和乘法必须满足交换.结合 ...
- 华理c语言设计网上作业,2011华理《c语言实验报告》.docx
C程序设计课程实验报告册 所在学院 班 级 学 号 姓 名 任课教师 <C语言程序设计>实 验报告(1 ) 学号:姓名:班级:成绩: 实验名称:函数综合实验 实验地点: 所使用的工具软件及 ...
- 伽罗华域下的伪随机序列图像编码(一)
最近看了一篇TPAMI文章Determining Both Surface Position and Orientation in Structured-Light-Based Sensing ,是用 ...
- 有限域(Galois Field,GF,伽罗华域)的乘法原理
今天在打AES的代码,打到列混合变换的时候对有限域的乘法不是很熟悉,但是查了很多资料结合书本最后算是弄会了,分享一下自己的心得 这里是引用在密码学中经常用到有限域的乘法,一般在AES中用到的是GF(2 ...
- 伽罗华域GF,GF(256)来源
Galois Field 1. 域 2. 域中单位元和逆元 3. 有限域GF(p)(p)(p) 4. 有限域GF(2p)(2^p)(2p) 4.1 有限域GF(2p)(2^p)(2p)的生成 4.2 ...
- 群论奠基人—埃瓦伊斯特·伽罗瓦
埃瓦伊斯特·伽罗瓦(Evariste Galois) 1811年10月25日生于法国巴黎附近的拉赖因堡:1832年5月31日卒于巴黎. 伽罗瓦的父亲N.G.伽罗瓦(Galois)是法国资产阶级革命的支 ...
- 线性反馈移位寄存器LFSR(斐波那契LFSR(多到一型)和伽罗瓦LFSR(一到多型)|verilog代码|Testbench|仿真结果)
线性反馈移位寄存器LFSR 一.前言 二.LFSR简介 三.斐波那契LFSR和伽罗瓦LFSR 3.1 斐波那契LFSR 3.1.1 斐波那契LFSR 3.1.2 verilog代码 3.1.3 Tes ...
- 2014年秋广州华师在线计算机的作业答案,18秋华师《C语言程序设计B》在线作业-4辅导资料...
18秋华师<C语言程序设计B>在线作业-4辅导资料 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 2.90 积分 18秋华师<C语 ...
- 华为云AI开发部总经理罗华霖:华为人工智能的实践与创新
来源:亿欧 作者:罗华霖 概要:9月21-22日,由深圳市罗湖区人民政府指导.亿欧公司主办的"GIIS-全球产业创新峰会"在罗湖区京基100瑞吉酒店盛大启幕. 9月21-22日,由 ...
- srwebsocket 服务器过段时间会关闭_王者荣耀:伽罗大招遭到暗改?开启后直接冷却时间,无法手动关闭...
体验服2.18版本的更新可以说让依靠伽罗上分的玩家心都凉了一半,毕竟伽罗引以为傲的暴击给敌方超高减速效果给直接下调了差不多一半的数值:原本90%的减速,这次调整,直接变为了50%.可以这样说,这次调整 ...
最新文章
- 【Kubernetes】Kubernetes的Service外部访问方式:NodePort和LoadBalancer
- react native 报错:cannot read property 'length' of undefined
- PrintWriter和Scanner的综合运用写文件并读文件
- 信息保真度准则_设计保真度的新的非科学公式
- 个人作业5——软件工程总结
- 怎么调节手机的刷新率_二分钟科普:手机上的“高刷新率”
- db2设置数据库增量备份_DB2在线增量备份 还原增量备份及前滚恢复
- javascript技术教程蔡敏_JavaScript基础与实践教程 (王萍萍,赵俊莉,孙强) pdf扫描版...
- google crx Hoxx 下载
- gf(2 4)有限域的乘法c语言实现,有限域GF(2^n)的C语言实现浅析
- windows系统上删除顽固文件
- ps修改画笔大小两种快捷键方式
- 18.数据统计之分组对象与apply函数
- window平台编译draco库
- vue 控制某个元素的显示与隐藏之v-if属性
- iOS底层系统:虚拟内存
- 交流电源和直流电源有什么区别?
- WordPress获取文章缩略图函数:get_the_post_thumbnail
- 【VTM10.0】xPredIntraAng函数解析
- 手把手带你飞Python爬虫+数据清洗新手教程(一)