您的位置:首页 > 其它

GF(2^8)生成元

2013-10-23 09:08 357 查看
目的是找出所有GF(2^8)的生成元。

方法很简单,从2开始遍历,将每个元素都与自身相乘255次,看是否能得到1~255。若能,则是生成元。

#include<iostream>
#include<fstream>
using namespace std;
unsigned char GFmul(unsigned char a, unsigned char b){
//GF(2^8) 乘法
unsigned char result = 0;
if((b&1) == 1)result = a;
b >>= 1;
for(int i = 1; i < 8; i ++){
if(a > 127){
a = (a << 1) ^ 0x1b;
}
else{
a <<= 1;
}
if((b&1) == 1){
result ^= a;
}
b >>= 1;
}
return result;
}
int findGenerator(int result[]){
//找出所有GF(2^8)的生成元
unsigned char x = 2;        //从2开始查找
int len = 0;
do{
int count[256], i;
for(i = 0; i < 256; i ++)count[i] = 0;
count[x] ++;
unsigned char tmp = x;
for(i = 2; i < 256; i ++){
tmp = GFmul(tmp, x);
count[tmp] ++;
}
for(i = 1; i < 256; i ++){
//查看是否所有的数都有生成,若是,则x为生成元
if(count[i] != 1)break;
}
if(i == 256)result[len ++] = x;
x ++;
}while(x != 0);
return len;
}
int main(){
//单元测试。输出所有的生成元。
int result[256];
int len = findGenerator(result);
ofstream write("Test.txt");
for(int i = 0; i < len; i ++)write<<result[i]<<endl;
write.close();
return 0;
}


C++
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: