![RSA加密算法設(shè)計(jì)說(shuō)明_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/2/bbc063b5-07cc-4561-9bd7-2ee5d84860ba/bbc063b5-07cc-4561-9bd7-2ee5d84860ba1.gif)
![RSA加密算法設(shè)計(jì)說(shuō)明_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/2/bbc063b5-07cc-4561-9bd7-2ee5d84860ba/bbc063b5-07cc-4561-9bd7-2ee5d84860ba2.gif)
![RSA加密算法設(shè)計(jì)說(shuō)明_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/2/bbc063b5-07cc-4561-9bd7-2ee5d84860ba/bbc063b5-07cc-4561-9bd7-2ee5d84860ba3.gif)
![RSA加密算法設(shè)計(jì)說(shuō)明_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/2/bbc063b5-07cc-4561-9bd7-2ee5d84860ba/bbc063b5-07cc-4561-9bd7-2ee5d84860ba4.gif)
![RSA加密算法設(shè)計(jì)說(shuō)明_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/2/bbc063b5-07cc-4561-9bd7-2ee5d84860ba/bbc063b5-07cc-4561-9bd7-2ee5d84860ba5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、. . . . 網(wǎng)絡(luò)安全作業(yè)題 目 RSA 加 密 算 法學(xué) 號(hào)專業(yè)與班級(jí) 網(wǎng)絡(luò)工程0902班姓 名日 期 2012.04.14 一、 RSA簡(jiǎn)介:RSA公開(kāi)密鑰密碼體制。所謂的公開(kāi)密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導(dǎo)出解密密鑰在計(jì)算上是不可行的”密碼體制。二、 RSA算法描述:RSA算法是一種非對(duì)稱密碼算法,所謂非對(duì)稱,就是指該算法需要一對(duì)密鑰,使用其中一個(gè)加密,則需要用另一個(gè)才能解密。 RSA的算法涉與三個(gè)參數(shù),n、e1、e2。 其中,n是兩個(gè)大質(zhì)數(shù)p、q的積,n的二進(jìn)制表示時(shí)所占用的位數(shù),就是所謂的密鑰長(zhǎng)度。 e1和e2是一對(duì)相關(guān)的值,e1可以任意取,
2、但要求e1與(p-1)*(q-1)互質(zhì);再選擇e2,要求(e2*e1)mod(p-1)*(q-1)=1。 (n與e1),(n與e2)就是密鑰對(duì)。 RSA加解密的算法完全一樣,設(shè)A為明文,B為密文,則:A=Be1 mod n;B=Ae2 mod n; e1和e2可以互換使用,即: A=Be2 mod n;B=Ae1 mod n;三、 實(shí)現(xiàn)代碼:1.實(shí)現(xiàn)RSA算法類的定義:class CRsaA : public CCmdTargetDECLARE_DYNCREATE(CRsaA)CRsaA(); / protected constructor used by dynamic creation/
3、成員函數(shù)private:void InitInt(void); /基本數(shù)據(jù)常量的初始化int IntValid(byteint validtemp); /返回大validtemp的非零位的個(gè)數(shù)int IntCmp(byteint A,byteint B); /比較大數(shù)A和B是否相等/自定義類型的基本運(yùn)算void Plus(byteint A,byteint B,byteint C); /C=A+Bvoid Substract(byteint SA,byteint SB,byteint SC); /SC=SA-SBvoid Multiply(byteint A,byteint B,byteint
4、 C); /C=A*Bvoid SetMode(byteint A,byteint B,byteint C,byteint D);/C=A%Bint PowerMode(byteint A,byteint C,byteint D,signed char flag400);/computing AB mod C->Dvoid IntRandom(byteint RandomA,int num); /隨機(jī)產(chǎn)生一個(gè)大數(shù)void LoadInt(byteint A,mtype B); /將質(zhì)數(shù)類型轉(zhuǎn)換為大數(shù)類型void TransBi(byteint B,signed char flag400)
5、 將大數(shù)B轉(zhuǎn)換為二進(jìn)制形式void Mdata(); 產(chǎn)生用于生成質(zhì)數(shù)中進(jìn)行比較的數(shù)int Prime(byteint Prm); /產(chǎn)生一個(gè)長(zhǎng)度為MLENGTH的質(zhì)數(shù)int ComputingPK(byteint Rvalue,byteint SK,byteint PK);/計(jì)算公鑰PKvoid ComputingR(byteint p,byteint q,byteint R); /計(jì)算模值Rvoid ComputingRvalue(byteint p,byteint q,byteint Rvalue); /計(jì)算$(r)void IntCpy(byteint A1,byteint B1);
6、/將大數(shù)B1的值拷貝到大數(shù)A1中void SetZero(byteint A); /將大數(shù)A清零CString PrtInt(byteint A); /將一個(gè)大數(shù)類型轉(zhuǎn)換為一個(gè)CString類型int Getinput(byteint result,CString input);/將字符串轉(zhuǎn)換為對(duì)應(yīng)的大數(shù)形式int Getinput1(byteint result,unsigned long input); /將長(zhǎng)整形數(shù)轉(zhuǎn)換為對(duì)應(yīng)的大數(shù)形式void RsaDo(byteint source,byteint R,byteint key,byteint desti);/實(shí)現(xiàn)加解密unsigned
7、long Os2ip(unsigned char* pstr);CString Ip2os(CString str);public:void GenKeys(CString& pk,CString& sk,CString& R); /提供給服務(wù)器使用的秘鑰產(chǎn)生函數(shù)int RsaEncrypt(CString& source,const char* key,const char* R,CStringArray& result);/加密CString RsaDecrypt(CStringArray& source,const char* sk,con
8、st char* R);/解密void GenKeysTable(); /生成秘鑰對(duì)文件void LoadKeysFromFile(CString& r,CString& sk,CString& pk);private:byteint ONEVALUE;byteint ZEROVALUE;byteint TWOVALUE;byteint EIGHTVALUE; /O,1,2,8 constantmtype ModelTESTNUM; /TESTNUM big number to be comparedmtype mZEROVALUE,tempModel; /0 cons
9、tantsigned char flag400;public:virtual CRsaA();functions here.DECLARE_MESSAGE_MAP();2.算法實(shí)現(xiàn)的主要代碼:/*-功能:進(jìn)行相關(guān)大數(shù)的初始化入口參數(shù):無(wú)返回值:無(wú)-*/void CRsaA:InitInt(void)SetZero(ZEROVALUE);/對(duì)大數(shù)變量zerovalue清零memset(mZEROVALUE,0,MLENGTH);SetZero(ONEVALUE); /對(duì)大數(shù)變量ONEVALUE進(jìn)行清零ONEVALUEDATALENGTH-1=1;/ONEVALUE的最后一位為1SetZero(T
10、WOVALUE);/將TOWVALUE進(jìn)行清零 TWOVALUEDATALENGTH-1=2;/TOWVALUE的最后一位為2SetZero(EIGHTVALUE);/對(duì)EIGHTVALUE進(jìn)行清零 EIGHTVALUEDATALENGTH-1=8;/最后一位為8return ;/*-功能:將一個(gè)大數(shù)A轉(zhuǎn)換為相應(yīng)的字符串形式入口參數(shù):大數(shù)A返回值:相對(duì)應(yīng)的字符串-*/CString CRsaA:PrtInt(byteint A)register i=0;int m,n;while(i<DATALENGTH && Ai=0) /跳過(guò)大數(shù)開(kāi)始的空白0i+;if(i<DA
11、TALENGTH)m=DATALENGTH-i; /求出有用的大數(shù)長(zhǎng)度n=0;/注意到這里的i已經(jīng)是數(shù)組中第一個(gè)非零元素的對(duì)應(yīng)位置,CString str=""/因此下面的循環(huán)就是從數(shù)組中while(i<DATALENGTH)str += (Ai+'0');return str;/*-功能:大數(shù)A與大數(shù)B相乘,結(jié)果放入C中 A×B->C入口參數(shù):被乘數(shù)A和乘數(shù)B,結(jié)果C返回值:無(wú)-*/void CRsaA:Multiply(byteint A,byteint B,byteint C)register i,j,w;int X,Y,Z;in
12、t Avalid=0;/Avalid=validating bits of Aint Bvalid=0;/Avalid=validating bits of Bwhile (AAvalid=0 && Avalid<DATALENGTH)Avalid+;/計(jì)算Avalidwhile (BBvalid=0 && Bvalid<DATALENGTH)Bvalid+;/計(jì)算BvalidSetZero(C);/將C清零初始化for(i=DATALENGTH-1;i>=Avalid;i-)for(j=DATALENGTH-1;j>=Bvalid;j-
13、) /逐位進(jìn)行相乘運(yùn)算X=Ai*Bj; Y=X/10;Z=X-10*Y;w=i+j-(DATALENGTH-1);Cw=Cw+Z;Cw-1=Cw-1+(Cw/10)+Y;Cw=Cw-(Cw/10)*10;return;/*-功能:AB的結(jié)果送C入口參數(shù):大數(shù)A,B,C返回值:無(wú)-*/void CRsaA:Plus(byteint A,byteint B,byteint C)register i;/,w;int X,Y,Z,m,n,valid;m=IntValid(A); /計(jì)算A的長(zhǎng)度 n=IntValid(B); /計(jì)算B的長(zhǎng)度valid=(m>n)?m+1:n+1; /計(jì)算時(shí)要以最長(zhǎng)
14、的數(shù)為準(zhǔn)SetZero(C); /將C清零for(i=DATALENGTH-1;i>=DATALENGTH-valid;i-)X=Ai+Bi; /按位相加Y=X/10;Z=X-10*Y;Ci=Ci+Z; /計(jì)算進(jìn)位Ci-1=Ci-1+Y;/*-功能:大數(shù)SA減去大數(shù)SB,結(jié)果放入SC入口參數(shù):被減數(shù)SA,減數(shù)SB,差SC-*/void CRsaA:Substract(byteint SA,byteint SB,byteint SC)byteint buf;register i,j;int X;IntCpy(buf,SA); /將SA的容拷貝到buf中SetZero(SC); /SC清零初
15、始化for(i=DATALENGTH-1;i>=0;i-)if(bufi<SBi) /如果最低位不夠減bufi=bufi+10; /向高位借1if(bufi-1>0) /如果高位夠減,直接減1(bufi-1)-; else /否則一直找到夠減的位j=i-1;while(bufj=0) /j不會(huì)出現(xiàn)越界,是因?yàn)楸WC了最高位不為0bufj-=9;bufj=bufj-1;X=bufi-SBi; /將各位減的結(jié)果存入SC中SCi=X;/*-功能:隨機(jī)地產(chǎn)生一個(gè)大數(shù)奇數(shù),長(zhǎng)度為num,最高位不是0,存放在RandomA中入口參數(shù):大數(shù)A,長(zhǎng)度num返回值:無(wú)-*/void CRsaA:
16、IntRandom(byteint RandomA,int num)int i;SetZero(RandomA); /將RandomA清零while(!(RandomADATALENGTH-1%2)RandomADATALENGTH-1=rand()%10;最后一位是偶數(shù)從新產(chǎn)生最后一位while(!(RandomADATALENGTH-num)/判斷條件保證RandomA最高位不是0RandomADATALENGTH-num=rand()%10;/如果最高位是0,從新產(chǎn)生最高位i=DATALENGTH-2;while(i>=DATALENGTH-num+1)/產(chǎn)生從次低位到次高位的所有
17、位上的數(shù)RandomAi-=rand()%10;/*-功能:將質(zhì)數(shù)類型B拷貝到大數(shù)A中,實(shí)現(xiàn)類型轉(zhuǎn)換入口參數(shù):大數(shù)A,質(zhì)數(shù)類型B返回值:無(wú)-*/功能:將數(shù)B拷貝到大數(shù)A,實(shí)現(xiàn)類型轉(zhuǎn)換void CRsaA:LoadInt(byteint A,mtype B)register i,j;SetZero(A); /A進(jìn)行清零初始化i=DATALENGTH-1;j=MLENGTH-1;while(j>0) /循環(huán)拷貝各位數(shù)字Ai-=Bj-;/*-功能:該函數(shù)用來(lái)從集合1,b-1中產(chǎn)生若干個(gè)用于檢測(cè)的數(shù),存放在Model中入口參數(shù):無(wú)返回值:無(wú)-*/void CRsaA:Mdata()registe
18、r i,j; /Randomly choose a set of 100 numbers in 1,b-1int k=MLENGTH-2;memset(Model,0,TESTNUM*MLENGTH); /這個(gè)函數(shù)在這里用來(lái)將整個(gè)數(shù)組清零,進(jìn)行初始化srand( (unsigned)time( NULL ) ); /進(jìn)行隨機(jī)函數(shù)的初始化for(i=0;i<TESTNUM;i+) /TESTNUM為需要產(chǎn)生的個(gè)數(shù)for(j=MLENGTH-1;j>=k;j-)Modelij=rand()%10; /注意這里與測(cè)試素?cái)?shù)的程序中的區(qū)別,if(memcmp(Modeli,mZEROVALU
19、E,MLENGTH)=0) i-;k-; /保證所產(chǎn)生的數(shù)不為0if (k<0) k=MLENGTH-2;/*-功能:該函數(shù)用來(lái)將十進(jìn)制的大整數(shù)轉(zhuǎn)換成二進(jìn)制的數(shù)入口參數(shù):需轉(zhuǎn)換的大數(shù)B,二進(jìn)制結(jié)果flag400返回值:無(wú)-*/void CRsaA:TransBi(byteint B,signed char flag400)byteint buf;byteint result;byteint temp;register i;SetZero(buf); SetZero(result); SetZero(temp);memset(flag,0,400); /將flag數(shù)組清零i=399;Int
20、Cpy(buf,B); /將B拷貝到buf中while(IntCmp(buf,ZEROVALUE)=1) /如果buf容為0SetMode(buf,TWOVALUE,temp,result); /將buf進(jìn)行大數(shù)的模2運(yùn)算,商在result中,余數(shù)tempflagi=tempDATALENGTH-1; IntCpy(buf,result); /對(duì)商繼續(xù)進(jìn)行模2運(yùn)算i-;flagi=-1; /設(shè)置一個(gè)標(biāo)志位,表明二進(jìn)制數(shù)的開(kāi)始/*-功能:該函數(shù)用來(lái)進(jìn)行模冪算法,A為底數(shù),模為c,二進(jìn)制的指數(shù)B存放在數(shù)組flag中入口參數(shù):底數(shù)A,模C,結(jié)果D,二進(jìn)制質(zhì)數(shù)flag400返回值:AB=1(mod C
21、),返回1;AB=p-1(mod C),返回2;否則返回0-*/int CRsaA:PowerMode(byteint A,byteint C,byteint D,signed char flag400)byteint buf;byteint result;byteint temp,P;register i;SetZero(D); SetZero(buf); SetZero(result); SetZero(temp); SetZero(P); /將D清零IntCpy(temp,A); /將A的值拷貝到temp中if(flag399=1) /最低位為1,拷貝本身,flagi只有1或者0兩種情況
22、IntCpy(result,A);else/最低位為0,則冪為1IntCpy(result,ONEVALUE);i=398;while(flagi!=-1) /判斷是否已經(jīng)到達(dá)指數(shù)盡頭Multiply(temp,temp,buf); /temp*temp->buf SetMode(buf,C,temp,P); /buf%c余數(shù)->temp,商->pif(flagi!=0) /如果該位不是0則將其和前一步低一位的結(jié)果進(jìn)行乘法運(yùn)算 /否則,將其作為該位的模,在高一位的運(yùn)算中,只要進(jìn)行一次Multiply(temp,result,buf); /平方運(yùn)算,就可以得到高一位的模SetM
23、ode(buf,C,result,P);i-; /result中存放的是最終結(jié)果IntCpy(buf,C);IntCpy(D,result);Substract(buf,ONEVALUE,temp);if(IntCmp(result,ONEVALUE)=0)return 1;if(IntCmp(result,temp)=0) return 0;/*-功能:產(chǎn)生一個(gè)質(zhì)數(shù)入口參數(shù):大數(shù)Prm返回值:產(chǎn)生成功,返回0-*/int CRsaA:Prime(byteint Prm)int i,k,ok;signed char flag400;byteint A,B,D,buf1,buf2;SetZero
24、(A); SetZero(B); SetZero(D); SetZero(buf1); SetZero(buf2);while(1) /一直循環(huán)直到找到一個(gè)素?cái)?shù)為止int pass=0;srand( (unsigned)time( NULL ) ); /初始化srandIntRandom(B,MLENGTH); IntCpy(Prm,B); /將B拷貝到prm中 C=N result primeSubstract(B,ONEVALUE,buf1); /將B-ONEVALUE的結(jié)果放到buf1中SetMode(buf1,TWOVALUE,buf2,B); /B=(B-1)/2的商,buf2=(B
25、-1)/2的余數(shù)TransBi(B,flag); /將B轉(zhuǎn)換為二進(jìn)制大數(shù)ok=1;for(i=0;i<TESTNUM;i+)LoadInt(A,Modeli); /將數(shù)組Model中的第i+1個(gè)數(shù)讀取到A中k=PowerMode(A,Prm,D,flag); /(Aflag) mod Prm ->kif(k!=1 && k!=2) /不符合判定規(guī)則ok=0;break;if(k=1) /判定條件1,G=A(n-1)/2=1if(k=2) /判定條件2,G=A(n-1)/2=p-1if (ok)/if(ok && pass_2)return 0;/fo
26、r循環(huán)用來(lái)檢測(cè)IntRandom(B,MLENGTH)產(chǎn)生的數(shù)B是否是一個(gè)素?cái)?shù)/*-功能:計(jì)算公鑰PK入口參數(shù):$(r)的值在Rvalue中,私鑰SK,公鑰PK返回值:成功找到,返回1-*/int CRsaA:ComputingPK(byteint Rvalue,byteint SK,byteint PK)register i;byteint PA,PB,PC,buf1,temp,buf2;SetZero(PK); SetZero(PA); SetZero(PB); SetZero(PC); SetZero(buf1); /清零初始化SetZero(temp); SetZero(buf2);w
27、hile(1)IntRandom(SK,SKLENGTH); IntCpy(PB,SK);IntCpy(PA,Rvalue);while(1)SetMode(PA,PB,PC,PK); /PA=PB*PK+PCi=IntCmp(PC,ONEVALUE);if(i=0) /PC=1, i=0break; /滿足條件,是互質(zhì)的i=IntCmp(PC,ZEROVALUE);if(i=0)i=-1; /PC=0,i=-1break; /不滿足互質(zhì)條件,跳出循環(huán),從新生成一個(gè)隨機(jī)數(shù)IntCpy(PA,PB); /按照歐幾里的定理繼續(xù)判斷IntCpy(PB,PC);if(i=0) /滿足,跳出查找循環(huán)br
28、eak;IntCpy(temp,ONEVALUE);IntCpy(PA,Rvalue);IntCpy(PB,SK);while(1)Multiply(PA,temp,buf1); /buf1=PA*tempPlus(buf1,ONEVALUE,buf2);/buf2=(PA*temp)+1SetMode(buf2,PB,buf1,PK);/buf2=(PA*temp)+1)%PBif(IntCmp(buf1,ZEROVALUE)=0)break;Plus(temp,ONEVALUE,buf1);IntCpy(temp,buf1);return 1; /SK and PK found/*-功能:
29、計(jì)算模R入口參數(shù):產(chǎn)生的質(zhì)數(shù)p,q,模R返回值:無(wú)-*/void CRsaA:ComputingR(byteint p,byteint q,byteint R)Multiply(p,q,R); / R=p*q, public mode number/*-功能:計(jì)算$(r)入口參數(shù):質(zhì)數(shù)p,質(zhì)數(shù)q,模$(r)放在Rvalue返回值:無(wú)-*/void CRsaA:ComputingRvalue(byteint p,byteint q,byteint Rvalue)byteint buf1,buf2;SetZero(buf1); SetZero(buf2);Substract(p,ONEVALUE,
30、buf1); / buf1=p-1Substract(q,ONEVALUE,buf2); / buf2=q-1Multiply(buf1,buf2,Rvalue); / Rvalue=(p-1)*(q-1)/*-功能:將接受的字符串轉(zhuǎn)換為大數(shù)類型入口參數(shù):大數(shù)result,字符串input返回值:數(shù)的長(zhǎng)度-*/int CRsaA:Getinput(byteint result,CString input)int i=DATALENGTH,m=0;long strlen;strlen=input.GetLength();if(strlen=0) return 0;elsefor(int j=0;
31、j<strlen;j+)resulti-strlen+j = (input.GetAt(j)-'0');return j;/*-功能:實(shí)現(xiàn)加密,解密運(yùn)算功能入口參數(shù):明文(大數(shù)類型source),模R,秘鑰key,結(jié)果desti返回值:無(wú)-*/void CRsaA:RsaDo(byteint source,byteint R,byteint key,byteint desti)TransBi(key,flag);PowerMode(source,R,desti,flag);/*-功能:將長(zhǎng)整型的數(shù)轉(zhuǎn)換為大數(shù)類型入口參數(shù):大數(shù)類型result,長(zhǎng)整形input返回值:成功,
32、返回?cái)?shù)的長(zhǎng)度,否則返回0;-*/int CRsaA:Getinput1(byteint result,unsigned long input)int i=DATALENGTH-1,m=0;long j=0;int k=0;if(input)doj=input/10;k=input-j*10;resulti=k;i-;m+;input=j;while(j);return m;elsereturn 0;/*-功能:將十六進(jìn)制的串轉(zhuǎn)換為數(shù)值入口參數(shù):字符串指針?lè)祷刂担撼晒?,返回?cái)?shù)-*/unsigned long CRsaA:Os2ip(unsigned char* pstr)unsigned lon
33、g ch=0;unsigned int j=0;unsigned long k=1;for(int i=0;i<4;i+)j = (unsigned int) (*(pstr+3-i);/*if( (*(pstr+3-i)>='0'&&(*(pstr+3-i)<='9')j = (*(pstr+3-i) - '0'if( (*(pstr+3-i)>='a'&&(*(pstr+3-i)<='f') j = (*(pstr+3-i) - 'a'
34、;+10;if( (*(pstr+3-i)>='A'&&(*(pstr+3-i)<='F')j = (*(pstr+3-i) - 'A'+10;*/ch += j*k;k*=256;return ch; /*-功能:將數(shù)串轉(zhuǎn)換為相應(yīng)的字符串入口參數(shù):字符串str返回值:返回轉(zhuǎn)換的結(jié)果;-*/CString CRsaA:Ip2os(CString str)int strlen=str.GetLength(),quotient=0,remainder=0;unsigned long num=0,temp=0;unsigne
35、d int k=1;CString strResult=""for(int i=strlen;i>0;i-) /得到相應(yīng)的數(shù)字串,存放在num中temp = (str.GetAt(i-1) - '0');num += temp*k;k *= 10;/采用模除的方式,求得相應(yīng)的十六進(jìn)制數(shù)for(int j=0;j<4;j+)/while(num!=0)quotient = num/256;remainder = num - quotient*256;/*if(remainder>=0&&remainder<=9)strR
36、esult.Insert(0,(remainder+'0');if(remainder>=10&&remainder<=15)strResult.Insert(0,(remainder-10+'a');*/strResult.Insert(0,(unsigned char)remainder);num = quotient;return strResult; /*-功能:產(chǎn)生RSA秘鑰對(duì)入口參數(shù):存放結(jié)果的字符串地址 返回值:無(wú)-*/void CRsaA:GenKeys(CString& pk,CString& sk,
37、CString& R)byteint m_p,m_q,m_R,m_Rvalue,m_PK,m_SK;SetZero(m_p); /對(duì)大數(shù)變量進(jìn)行清零初始化SetZero(m_q); SetZero(m_R); SetZero(m_Rvalue); SetZero(m_PK); SetZero(m_SK);Mdata(); /生成比較數(shù)表AfxMessageBox("開(kāi)始計(jì)算質(zhì)數(shù)P.");Prime(m_p); /生成素?cái)?shù)p qAfxMessageBox("開(kāi)始計(jì)算質(zhì)數(shù)Q.");Prime(m_q);AfxMessageBox("開(kāi)始計(jì)算
38、模R.");ComputingR(m_p,m_q,m_R); /計(jì)算模RAfxMessageBox("開(kāi)始計(jì)算模r");ComputingRvalue(m_p,m_q,m_Rvalue); /計(jì)算rAfxMessageBox("開(kāi)始計(jì)算秘鑰SK,PK");ComputingPK(m_Rvalue,m_PK,m_SK); / Generate PK and SK/CGenKeyBusyDlg dlg1;/g1.DoModal();R=PrtInt(m_R);pk=PrtInt(m_PK);sk=PrtInt(m_SK);return ;/*-功能
39、:實(shí)現(xiàn)加密功能接口入口參數(shù):明文字符串source,模字符串R,秘鑰字符串key,結(jié)果字符串?dāng)?shù)組result返回值:無(wú)-*/int CRsaA:RsaEncrypt(CString& source,const char *key,const char *R,CStringArray& result)unsigned char* pstr;int j;/sourcelen,j;byteint m_key,m_R,desti,aa;SetZero(desti); /將大數(shù)變量清零初始化SetZero(aa);/SetZero(bb);SetZero(m_key);SetZero(m
40、_R);pstr = (unsigned char*)(LPCTSTR)source; /得到字符串?dāng)?shù)據(jù)的指針j = source.GetLength(); result.SetSize(j,1);Getinput(m_key,key); /將字符串轉(zhuǎn)換為大數(shù)類型Getinput(m_R,R);for(int i=0;i<j;i+)Getinput1(desti,Os2ip(pstr); /將四個(gè)字節(jié)的輸入轉(zhuǎn)換為大數(shù)類型數(shù)值RsaDo(desti,m_R,m_key,aa); /進(jìn)行加密運(yùn)算result.SetAt(i,PrtInt(aa); /將結(jié)果存放到數(shù)組中SetZero(desti); SetZero(aa);pstr += 4;return j;/*-功能:實(shí)現(xiàn)解密功能接口入口參數(shù):密文字符串?dāng)?shù)組source,秘鑰字符串sk,模字符串R,返回值:結(jié)果字符串?dāng)?shù)組result-*/CString CRsaA:RsaDecrypt(CStringArray& source,const char* sk,const char* R)int index=0;CString result;byteint m_sk,m_r,desti
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 知識(shí)管理提升企業(yè)核心競(jìng)爭(zhēng)力的關(guān)鍵
- 外研版高中英語(yǔ)選擇性必修第四冊(cè)UNIT5 Period2課件
- 外研版高中英語(yǔ)選擇性必修第四冊(cè)UNIT2 Period4課件
- Module 1 Unit 2 Theyre near the window綜合練習(xí) 教科版(含答案)
- 護(hù)師聘任申請(qǐng)書
- 2024-2030年中國(guó)墨旱蓮行業(yè)市場(chǎng)深度分析及投資策略研究報(bào)告
- 2025-2030年中國(guó)手工型玻璃噴砂保護(hù)膜項(xiàng)目投資可行性研究分析報(bào)告
- 高中生補(bǔ)助申請(qǐng)書
- 現(xiàn)代辦公空間的環(huán)境藝術(shù)設(shè)計(jì)案例分享
- 知識(shí)產(chǎn)權(quán)在企業(yè)辦公文化中的角色
- 2024-2025學(xué)年部編版歷史九年級(jí)上冊(cè)期末復(fù)習(xí)練習(xí)題(含答案)
- 2025年北京生命科技研究院招聘筆試參考題庫(kù)含答案解析
- 銀行金融機(jī)構(gòu)銀行金融服務(wù)協(xié)議
- 基于ChatGPT的ESG評(píng)級(jí)體系實(shí)現(xiàn)機(jī)制研究
- GB/T 27697-2024立式油壓千斤頂
- 《消防機(jī)器人相關(guān)技術(shù)研究》
- 《商務(wù)數(shù)據(jù)分析》課件-商務(wù)數(shù)據(jù)的分析
- 2024年考研政治真題及答案
- 【直播薪資考核】短視頻直播電商部門崗位職責(zé)及績(jī)效考核指標(biāo)管理實(shí)施辦法-市場(chǎng)營(yíng)銷策劃-直播公司團(tuán)隊(duì)管理
- 項(xiàng)目設(shè)計(jì)報(bào)告范文高中
- 成人手術(shù)后疼痛評(píng)估與護(hù)理團(tuán)體標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論