现代密码学第一次实验:线性移位寄存器

前言

为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正!

一、实验目的

1.了解线性移位寄存器产生伪随机序列的原理。
2.伪随机寄存器的软件实现。
3.同一个反馈函数不同初始值下的输出序列。
4.同一个初始值在不同反馈函数下的输出序列。

二、实验环境

Microsoft Visual Studio 2019

三、实验内容及步骤

1.编程实现8位线性移位寄存器。
2.观察输出序列前255位的随机性。
3.改变反馈函数,再观察输出序列前255位的随机性。
4.改变初始值,再观察输出序列前255位的随机性。
5.找到一个m序列。**

四、实验要求

1.程序设计的思想,及程序原代码。
2.报告观察结果。
3.对观察结果的分析。
4.分析8位寄存器产生的m序列。***

五、实验程序清单

实验代码修改为如下所示:

void CMFCApplication2View::OnBnClickedButton1()
{
	CString str;
	GetDlgItemText(IDC_EDIT4, str);
	unsigned int t1, f;
	unsigned int lfsr, fs;
	int fsc = _ttoi(str);
	CString out;
	int i, j, c1 = 0, c2 = 0;
	lfsr = 0x95;
	for (i = 1; i <= 255; i++)
	{
		fs = lfsr&fsc;
		t1 = lfsr & 0x80;
		if (t1 == 0)
		{
			c1++;
			out += '0';
		}
		else
		{
			out += '1';
			c2++;
		}
		f = 0;
		for (j = 0; j<8; j++)
		{
			if (fs & 0x1 != 0)
				f = f ^ 1;
			else
				f = f ^ 0;
			fs = fs / 2;
		}
		lfsr = lfsr / 2;
		if (f == 1)
			lfsr = lfsr | 0x80;
		else
			lfsr = lfsr & 0x7f;
	}
	CString zero, one;
	zero.Format(_T("%d"), c1);
	SetDlgItemText(IDC_EDIT1, zero);
	one.Format(_T("%d"), c2);
	SetDlgItemText(IDC_EDIT2, one);
	SetDlgItemText(IDC_EDIT3, out);
}

六、实验结果

实验运行如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、实验总结

通过本次实验,我们可分析得到如下信息与结论:由于线性反馈移位寄存器的运算是确定的,因此,由寄存器生成的数据流可完全决定寄存器现在的状态。由于寄存器的状态终究是有限的,它终将生成一个固定循环。通过多项式,线性反馈移位寄存器可以生成具有伪随机特性的长循环周期序列。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knight_V_Schumacher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值