由于项目的需要,在网上扒了半天,没有找到域GF(2^n)的C语言实现的系统的介绍。本文试图解释偶特征有限域的实现,让读者不必像我一样浪费太多时间在搜索中。本文以GF(2^8)为例。转载请注明出处,谢谢!
甲、有限域的加法实现
简单的异或运算即可:
unsigned char add(unsigned
char a, unsigned char b) {
return a ^ b;
}
乙、有限域的减法实现
与加法相同
unsigned char sub(unsigned char a, unsigned
char b) {
return a ^ b;
}
丙、有限域的乘法实现
算法简介
输入:8-bit数a,b,
输出:8-bit数c
1、 设定c的初始值为0
2、 执行以下循环8次
(1) 如果b的最低位是1,则c与a做异或运算。
(2) 检查a的最高位是否为1.
(3) a左移一位,即舍弃最高位,最低位以0补充。
(4) 如果在上一步左移前,a的最高位是1,则a与十六进制数0x1b做异或运算。
(5) b右移1位,即舍弃最低位,最高位以0补充。
3、c
就是a和b的乘积。
乘法伪代码:
unsigned char mul(unsigned char a, unsigned char b) {
unsigned char p =