GF(2^8)生成元
2013-10-23 09:08
357 查看
目的是找出所有GF(2^8)的生成元。
方法很简单,从2开始遍历,将每个元素都与自身相乘255次,看是否能得到1~255。若能,则是生成元。
C++
方法很简单,从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++
相关文章推荐
- 有限域GF(2^8)内乘法代码实现以及原理
- GF(2^8)乘法优化
- gf_file_from_blob(blob blob1,string file1) pb大字段生成文件方法
- 有限域GF(2^8)的四则运算及拉格朗日插值
- 有限域GF(2^8)内乘法代码实现以及原理
- 在GF(2^8)下可做任意两个数乘法的程序
- Inverses in the Field GF(2^8)
- 使用乘法表计算GF(2^8)中的乘法
- 有限域GF(2^8)的四则运算及拉格朗日插值
- GF(2^8)运算一一(一)
- GF(2^8)乘法
- GF(2^8)的运算法则
- GF(2^8)运算一一(二)
- 有限域GF(2^8)的四则运算及拉格朗日插值
- 用libtemplate实现静态网页生成
- Java随机生成动态验证码
- Linux下Makefile的automake生成全攻略
- 动态生成列
- 浅析usb转serial串口设备在linux内核中枚举创建及生成tty设备的全过程
- 用python生成xml