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