- 1、本文档共23页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
密码学应用与实践课程设计报告课程设计说明书之RC4
Harbin Institute of Technology at Weihai
密码学应用与实践
课程设计报告
专 业: 信息安全
班 级:
学 号:
姓 名:
伪随机数发生器LFSR 2
1.LFSR原理 2
2.设计思想 5
3.设计流程图 5
4.功能实现 5
1.生成随机数 5
2.生成序列 6
3.游程检测 7
5.总结 8
RC4加密与解密 9
1.RC4密码算法原理 9
2.设计思想 10
3.设计流程图 10
4.功能实现 11
1.打开文件 11
2.加密文件 11
3.解密文件 13
5.总结 15
源代码 15
伪随机数发生器LFSR
1.LFSR原理
在流密码加密中通常使用伪随机数发生器来产生密钥流,从而进行加密与解密,其结构如下图所示,而线性反馈移位寄存器(LFSR)是一个产生二进制位序列的机制。
图2 LFSR寄存器设计
2.移位寄存器
图3 序列产生方法
若想输出二进制序列,不但需要设计移位寄存器以及反馈系数,而且还需输入种子(seeds)来启动发生器,例如下左图所示LFSR,下右图即为输入种子(1000)后寄存器的移位及输出状态:
由上例还可看出LFSR具有周期性,若要尽可能输出较多的随机数即产生m-序列(T=2n-1),则需合理的设计寄存器的反馈系数,不同的反馈系数产生随机序列的周期不同。
图5 LFSR流程图
4.功能实现
1.生成随机数
随机数的生成考虑以下两个函数
函数一:int rand(void); 从rand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。
函数二:void srand(unsigned seed); 参数seed是srand()的种子,用来初始化rand()的起始值。可以认为rand()在每次被调用的时候,它会查看:1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用srand(seed)一次来初始化它的起始值。2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。
在这里我使用系统时间作为种子来初始化srand()的起始值,使用time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型在传给srand函数oid CRC4Dlg::OnButtonCreatrn() //生成随机数
{
int t,i,k;
m_BRandNumber=;
CString LastNo;
srand(time(0)); //使用系统时间seed来初始化
t=1+rand()%1023;
m_RandNumber=t;
for(i=0;i10;i++) //转换成二进制
{
k=t%2;
t=t/2;
RandNumber[i]=k;//注意顺序问题
LastNo.Format(%d,k);
m_BRandNumber=LastNo+m_BRandNumber;
}
IsCreatRN=TRUE;
UpdateData(FALSE);
}void CRC4Dlg::OnButtonS() //生成序列
{
if(IsCreatRN==FALSE)
{
AfxMessageBox(请先生成随机数!!!);
return;
}
int i,j,m,n;
CString MyNumber;
for(i=0;i1023;i++)
{
m=RandNumber[0];
SeqRandNumber[i]=m;
MyNumber.Format(%d,m);
m_SeqRandNumber=m_SeqRandNumber+MyNumber;
n=(RandNumber[9]+RandNumber[8]+RandNumber[5]+RandNumber[0])%2;//模加
for(j=0;j9;j++)
{
RandNumber[j]=RandNumber[j+1];
}//移位
RandNumber[j]=n;//移位寄存器的最高位根据特征多项式求出
}
UpdateData(FALSE);
IsCreatList=TRUE;
m_SeqRandNumber=;
}void CRC4Dlg::OnButtonT
文档评论(0)