基于VC的RSA加密与解密实现技术_第1页
基于VC的RSA加密与解密实现技术_第2页
基于VC的RSA加密与解密实现技术_第3页
基于VC的RSA加密与解密实现技术_第4页
基于VC的RSA加密与解密实现技术_第5页
已阅读5页,还剩5页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于VC的RSA加密与解密实现技术一、RSA基本原理对明文分组M和密文分组C,加密与解密过程如下:C = POW (M , e) mod nM = POW(C , d) mod n = POW(POW( M ,e), d) mod n=POW( M,e*d)其中POW是指数函数,mod是求余数函数。其中收发双方均已知n,发送放已知e,只有接受方已知d,因此公钥加密算法的公钥为KU= e , n,私钥为KR=d , n。该算法要能用做公钥加密,必须满足下列条件:1. 可以找到e ,d和n,使得对所有Mn ,POW(M ,e*d)=M mod n .2. 对所有 Mn,计算POW (M , e)和

2、POW(C , d)是比较容易的。3. 由e 和n确定d是不可行的下面介绍RSA算法,该算法中到的下列的元素:两个素数p, q (保密的,选定的)n=p*q (公开的,计算得出的)e , gcd ( x(n),e) =1;1e 1000#pragma once#endif / _MSC_VER 1000#include / CRSADlg dialogclass CRSADlg : public CDialog/ Constructionpublic: char CalculateModOfChar(double num1, double num2); char CalculateModOfC

3、har(const char cChar, double num,long *ps); double calculatemod(double num1, double num2); int primeNumber(long m); CRSADlg(CWnd* pParent = NULL); / standard constructor/ Dialog Data /AFX_DATA(CRSADlg) enum IDD = IDD_RSA_DIALOG ; CEdit m_OpenEdit; CEdit m_CryptographEdit; CEdit m_PriKeyEdit; CEdit m

4、_ResourceEdit; CEdit m_Line; CEdit m_Char; long m_PubNEdit; long m_PubXEdit; long m_PrimeEdit1; long m_PrimeEdit2; long m_PubKeyEdit; /AFX_DATA / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CRSADlg) protected: virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support /AFX_

5、VIRTUAL/ Implementationprotected: HICON m_hIcon; / Generated message map functions /AFX_MSG(CRSADlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnCalculateButton(); afx_msg void OnPubkeyButt

6、on(); afx_msg void OnPrikeyButton(); afx_msg void OnChangeResourceEdit(); afx_msg void OnHidePrikeyButton(); afx_msg void OnShowPrikeyButton(); afx_msg void OnClearButton(); afx_msg void OnExitButton(); afx_msg void OnEncryptButton(); afx_msg void OnOpenButton(); afx_msg void OnEncryptTextButton();

7、afx_msg void OnOpenTextbutton(); afx_msg void OnCalculateMenu(); afx_msg void OnPubkeyMenu(); afx_msg void OnPrikeyMenu(); afx_msg void OnHideMenu(); afx_msg void OnShowMenu(); afx_msg void OnClearMenu(); afx_msg void OnExitMenu(); afx_msg void OnEncryptnumMenu(); afx_msg void OnOpennumMenu(); afx_m

8、sg void OnEncrypttextMenu(); afx_msg void OnOpentextMenu(); afx_msg void OnAboutMenu(); /AFX_MSG DECLARE_MESSAGE_MAP()private: long lArrayOfCount300; /文本加密和解密过程中记数功能;/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(A

9、FX_RSADLG_H_D491C4A6_0DE9_4430_BE31_2150D1C5E35F_INCLUDED_) 五、映射消息的应用程序代码1、void CRSADlg:OnCalculateButton() /计算按钮处理函数 UpdateData(TRUE); int flag1,flag2; flag1=primeNumber(m_PrimeEdit1); flag2=primeNumber(m_PrimeEdit2); if(flag1=1) m_PrimeEdit1=m_PrimeEdit1; else m_PrimeEdit1=0; if(flag2=1) m_PrimeEd

10、it2=m_PrimeEdit2; else m_PrimeEdit2=0; m_PubNEdit=m_PrimeEdit1*m_PrimeEdit2; m_PubXEdit=(m_PrimeEdit1-1)*(m_PrimeEdit2-1); UpdateData(FALSE);2、int CRSADlg:primeNumber(long m) /判断是否为素数 int flag=1; long temp=(long)sqrt(m); for(int i=2;im_PubXEdit) m_PubKeyEdit=0; UpdateData(FALSE);4、void CRSADlg:OnPri

11、keyButton() UpdateData(TRUE); double privatenum; char cBuffer32; for(double i=1; ;i+) double temp=fmod(i*m_PubXEdit+1),m_PubKeyEdit); if(temp=0.0 & (i*m_PubXEdit+1)/m_PubKeyEditm_PubXEdit) privatenum=(i*m_PubXEdit+1)/m_PubKeyEdit; break; sprintf(cBuffer,%0.0f,privatenum); m_PriKeyEdit.SetWindowText(

12、cBuffer);5、void CRSADlg:OnChangeResourceEdit() CString METext; char Count10; int nCharNum,nLineNum; m_ResourceEdit.GetWindowText(METext); nCharNum=METext.GetLength(); nLineNum=m_ResourceEdit.GetLineCount(); nCharNum-=(nLineNum-1); itoa(nCharNum,Count,10); m_Char.SetWindowText(Count); itoa(nLineNum,C

13、ount,10); m_Line.SetWindowText(Count);6、void CRSADlg:OnHidePrikeyButton() m_PriKeyEdit.ShowWindow(SW_HIDE);8、void CRSADlg:OnExitButton() OnOK();9、void CRSADlg:OnOpenButton() /数字解密按钮处理函数 char sArray20; char Count32; double number1,number2; double nPriKey; m_PriKeyEdit.GetWindowText(sArray,20); nPriKe

14、y=atof(LPCTSTR)sArray); m_CryptographEdit.GetWindowText(sArray,20); number1=atof(LPCTSTR)sArray); number2=calculatemod(number1,nPriKey); sprintf(Count,%0.0f,number2); m_OpenEdit.SetWindowText(Count);10、double CRSADlg:calculatemod(double num1, double num2) /数字加密和解密算法 /求余处理函数 double mul=1.0; for(long

15、i=0;i(long)num2;i+) mul*=fmod(num1,m_PubNEdit); mul=fmod(mul,m_PubNEdit); mul=fmod(mul,m_PubNEdit); return mul; 11、void CRSADlg:OnEncryptTextButton() long *point=lArrayOfCount; CString sArray; int nCount; m_Char.GetWindowText(sArray); nCount=atoi(sArray); char sResourceText300; char sCryptogramText3

16、00; char *pResourceText=sResourceText; char *pCryptogramText=sCryptogramText; m_ResourceEdit.GetWindowText(sResourceText,nCount+1); for(int i=0;inCount;i+) *pCryptogramText=CalculateModOfChar(*pResourceText,m_PubKeyEdit,point);/调用文本加密求余函 point+; /指向下个地址,准备记录下个数 pResourceText+; pCryptogramText+; *pCr

17、yptogramTextnCount=0; m_CryptographEdit.SetWindowText(sCryptogramText);12、void CRSADlg:OnOpenTextbutton() long *point1=lArrayOfCount; char sArray10; int nCount; double fPriKey; m_Char.GetWindowText(sArray,10); nCount=atoi(LPCTSTR)sArray); m_PriKeyEdit.GetWindowText(sArray,10); fPriKey=atof(LPCTSTR)s

18、Array); char sOpenText300; char sCryptogramText300; char *pOpenText=sOpenText; char *pCryptogramText=sCryptogramText; m_CryptographEdit.GetWindowText(sCryptogramText,300); double tempnumber; for(int i=0;inCount;i+) tempnumber=(*point1)*128+*pCryptogramText; *pOpenText=CalculateModOfChar(tempnumber,f

19、PriKey); /调用文本解密求余函数,得到解密字符 point1+; /指向记录下个数字 pCryptogramText+; pOpenText+; *pOpenTextnCount=0; m_OpenEdit.SetWindowText(sOpenText);13、char CRSADlg:CalculateModOfChar(const char cChar, double num,long *ps) /文本加密算法求余处理函数 double mul=1; for(long i=0;inum;i+) mul*=fmod(double)cChar,m_PubNEdit); mul=fmo

20、d(mul,m_PubNEdit); *ps=(long)mul/128; return (char)fmod(mul,128); 14、char CRSADlg:CalculateModOfChar(double num1, double num2) /文本函数解密处理函数 double mul=1; for(long i=0;inum2;i+) mul*=fmod(num1,m_PubNEdit); mul=fmod(mul,m_PubNEdit); return (char)mul; 15、void CRSADlg:OnCalculateMenu() OnCalculateButton(

21、);16、void CRSADlg:OnPubkeyMenu() OnPubkeyButton();17、void CRSADlg:OnPrikeyMenu() OnPrikeyButton();18、void CRSADlg:OnHideMenu() OnHidePrikeyButton();19、void CRSADlg:OnShowMenu() OnShowPrikeyButton();20、void CRSADlg:OnClearMenu() OnClearButton();21、void CRSADlg:OnExitMenu() OnExitButton();22、void CRSADlg:OnEncryptnumMenu() OnEncryptButton();23、void CRSADlg:OnOpennumMenu() OnOpenButton();24、void CRSADlg:OnEncrypttextMenu() OnEncryptTextButton();25、void CRSADlg:OnOpentextMenu() OnOpenTextbutton();26、void CRSADlg:OnAboutMenu() MessageBox(卖石头创作 QQ:170758887nnRSA V1.0 版权所有 (C) 2006n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论