5级线性反馈移位积存器模拟.txt

来自「该程序用于实现密码学中的线性反馈移位寄存器的模拟」· 文本 代码 · 共 52 行

TXT
52
字号
#include<iostream.h>
void fun(int a[5],int b[50] ,int c[5])//异或运算
{    
	int i,j,data;
	for(i=0;i<50;i++)
	{   
		b[i]=a[0];
		data=(c[4]*a[0])^(c[3]*a[1])^(c[2]*a[2])^(c[1]*a[3])^(c[0]*a[4]);
		for(j=0;j<4;j++)
			a[j]=a[j+1];
		a[4]=data;
	}
}

const int n=5;//5维线性反馈移位寄存器
int find(int aa[])//计算周期
{
	int flag=(2<<n-1)-1;//周期上界
	int T=5;//初始化周期(逐步搜索)
	int i;
	for(i=0;i<flag;i++)
	{
		while(aa[i]==aa[i+T]&&i<=flag-T)
		{i++;}
		if(i==flag-T+1) {return T;}
		else {i=0;T++;}
	}
	return 0;
}

void main()
{
	int a[5],b[50],c[5];
	int i,j;
	for(i=4;i>=0;i--)//反馈函数的系数输入为0或1(总是假定C4为1)
	{
		cout<<"Value for c["<<i<<"]=";
	    cin>>c[i];
	}
	for(j=0;j<5;j++)//输入初始状态为0或1的序列
	{
		cout<<"Value for a["<<j<<"]=";
	    cin>>a[j];
	}
	fun(a,b,c);
	cout<<"输出序列为:";
    for(i=0;i<50;i++)
		cout<<b[i];//输出序列
	if(i>=50)
		cout<<"......"<<endl;
	cout<<"周期为:"<<find(b)<<endl;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?