文档详情

2010安全与保密实验指导书(新).doc

发布:2016-05-21约1.07万字共37页下载文档
文本预览下载声明
实验指导一 密码体制的编程实现 一、实验要求和目的 (1)用VC++实现RSA加解密算法; (2)加深对RSA加解密算法的理解; 二、实验条件 (1)安装VC++开发环境; (2)熟悉RSA加解密算法的有关知识; 三、实验时间 2学时 四、实验内容和步骤 RSA加解密算法是公开密钥密码体制的一种加密算法,它不仅可以作为加密算法使用,而且可以作为数字签名和密钥分配与管理。在这种体制中,每个用户有两个密钥:加密密钥PK={e,n}和解秘密钥SK={d,n}。用户把加密密钥PK公开,使得系统中的任何其他用户都可以使用,而对解密密钥SK中的d则保密。 1. 实验的建立 (1)在Windows桌面上选择“开始”|“程序”|“Microsoft Visual Studio 6.0”|“Microsoft Visual C++6.0”命令,进入“Microsoft Visual C++6.0”系统界面。在“Microsoft Visual C++6.0”系统界面中,建立加解密项目并运行之,出现图1所示的程序界面; 图1 程序界面 (2)单击“求随机数N、E”按钮,获得N、D、E三个参数(或者直接输入N、D、E三个参数),得到图2所示的结果; 图2单击“求随机数N、E”按钮后的结果 (3)在第三个文本框中输入待加密的明文,然后单击“加密”按钮,密文出现在第四个文本框中,如图3所示; 图3得到密文 (4)单击“解密”按钮,恢复的明文出现在第四个文本框中,如图4所示; 图4得到明文 2. 重要源代码的说明 (1)选取参数D,求随机数N、E; void CRSADlg::OnButtonGet() { ready=1; UpdateData(TRUE); int len=2; for(int i=0;im_Len;i++){len*=2;} CTime t0=CTime::GetCurrentTime(); P.Mov(0); Q.Mov(0); N.Mov(0); E.Mov(0); P.GetPrime(len); //得到两个随机数 Q.GetPrime(len); N.Mov(P.Mul(Q)); //计算N=P*Q N.Put(m_N); P.m_ulValue[0]--; Q.m_ulValue[0]--; P.Mov(P.Mul(Q)); //P=(P-1)*(Q-1) D.Mov(0x10001); //解密密钥D为已知 m_D=10001; E.Mov(D.Euc(P)); //求与解密密钥D互质的E E.Put(m_E); CTime t1=CTime::GetCurrentTime(); CTimeSpan t=t1-t0; m_OUT.Format(%d,t.GetTotalSeconds()); m_OUT+= 秒; Q.m_ulValue[0]=0; UpdateData(FALSE);// TODO: Add your control notification handler code here } (2)“加密”按钮对应的程序代码; void CRSADlg::OnOK() { if(ready==0) { m_OUT=_T(请先输入或生成N、D、E); UpdateData(FALSE); return; } UpdateData(TRUE); if(m_IN.GetLength()256) { m_OUT=_T(N不得大于256位); UpdateData(FALSE); return; } for(int i=0;im_IN.GetLength();i++) { if((m_IN[i]0)|| ((m_IN[i]9)(m_IN[i]A))|| ((m_IN[i]F)(m_IN[i]a))|| (m_IN[i]f)) { m_OUT=_T(待加密数据必须为0-9或A-F或a-f组成的整数); UpdateData(FALSE); return; } } P.Get(m_IN); if(P.Cmp(N)=0) { m_OUT=_T(待加密数据必须小于N); UpdateData(FALSE); return; } Q.Mov(P.RsaTrans(E,N)); Q.Put(m_OUT); UpdateData(FALSE); } (3)“解密”按钮对应的程序代码; void CRSADlg::OnDecrypt() { if(
显示全部
相似文档