信息安全技术实验四公钥加密实验.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息安全技术实验四公钥加密实验

信息安全技术实验四 公钥加密实验 一 实验目标 请大家使用MFC完成程序的调试和实验内容。 二 实验内容 1 RSA简介 公钥加密算法: 加密使用一个密钥(公钥),解密使用另一个密钥(私钥),这样的算法称为公钥加密算法。 2)RSA介绍 RSA是目前使用最广泛的公钥加密算法,是Rivest, Shamir,Adleman (RSA) 三个人, 1977年发明出来的。是最典型的公钥密码体制 算法基于单向陷门函数的原理。以模幂运算为基本运算。安全性基于大数因子分解的困难性(将一个充分大的正整数分解成两个素数之积几乎是不可能的)。数学基础是著名的欧拉(Euler)数论。 2 RSA的实现 1)RSA数学表达 1.1)RSA初始化步骤 对于每个用户都生成自己的公钥\私钥对: 选择两个随机大素数 (~100 digit,10进制), p, q 计算模数 N=p.q 选择一个随机加密密钥匙 e : eN, gcd(e,?(N))=1 解下列同余方程,求解密密钥 d: e.d=1 mod ?(N) and 0=d=N 私钥是{d,p,q},是自己保留的,秘密的 公钥是K={e,N},是公开发布的,任何人都可以获得。 1.2) RSA加密过程 要加密消息 M, 发送者要得到接收者的公钥Kr={er,Nr} (注释 r=receiver) 计算: C=Mer mod Nr, where 0=MN 将密文C发送给接收者 1.3) RSA解密过程 为解密 C, 接收者使用私钥K-1r={d,p,q} 计算得出: M=Cd mod Nr 1.4)其中,私钥d的计算可以使用下列公式 对满足方程a x ≡ 1 mod r的X: x=aφ(r)-1 mod r 2)RSA的算法程序: 2.1) 在RSA加解密算法Dlg.h文件中定义了p,q,n,e,d等变量 public: CBigInt Q; CBigInt P; CBigInt N; CBigInt E; CBigInt D; 2.2) 主体代码,实现数据的RSA加密 //RSA加密 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));//RSA加密实现,调用P.RsaTrans(E,N) 把P加密成Q,P是明文,Q是密文 Q.Put(m_OUT); //Q输出赋值给变量m_OUT, 这个是与界面中的加密/解密输出结果文本框对应的变量 UpdateData(FALSE); //FALSE表示,把m_OUT的值输出到界面显示。 } //RSA解密 void CRSADlg::OnDecrypt() { if((ready==0)||(Q.m_ulValue[0]==0)) { m_OUT=_T(请先进行加密); UpdateData(FALSE); return; } Q.Get(m_OUT); P.Mov(Q.RsaTrans(D,N)); P.Put(m_OUT); UpdateData(FALSE);// TODO: Add your control notification handler code here } 2.3) 程序调试方法 a) 解压到一个目录下: b)打开vc++6.0 c)打开工作区,在英文版中,是“open workspace” d) 选定目录 e)选中相应的dsw文件 f) 观察onOK代码,是主要的代码完成RSA加密操作 g)调试程序 三 注意事项 1. 搞清楚Put,Ge

文档评论(0)

xjj2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档