課程報(bào)告-非對(duì)稱加密算法的實(shí)現(xiàn).doc_第1頁
課程報(bào)告-非對(duì)稱加密算法的實(shí)現(xiàn).doc_第2頁
課程報(bào)告-非對(duì)稱加密算法的實(shí)現(xiàn).doc_第3頁
課程報(bào)告-非對(duì)稱加密算法的實(shí)現(xiàn).doc_第4頁
課程報(bào)告-非對(duì)稱加密算法的實(shí)現(xiàn).doc_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、非對(duì)稱加密算法的實(shí)現(xiàn)一、設(shè)計(jì)內(nèi)容、算法原理非對(duì)稱密碼系統(tǒng)即公鑰密碼系統(tǒng),主流分為基于大整數(shù)分解難度,基于離散對(duì)數(shù)計(jì)算難度和橢圓曲線公鑰密碼三類。本次實(shí)驗(yàn)主要介紹RSA 、ELG加密。二、RSA1).RSA公鑰密碼算法原理和過程:Alice要求Bob將信息m用RSA方法加密傳送回來, Alice找到大素?cái)?shù)p,q, 令n=pq, 取a>1滿足 ,再找d使得,然后Alice將n、a作為加密密鑰(公鑰)發(fā)送給Bob, 這里p,q,d,都是私鑰,要求保密,用作解密。Bob 將原文m<<n加密得到密文,并將密文EA傳送給 Alice。Alice收到后,計(jì)算 得到原文m。這里大素?cái)?shù)要求足夠

2、大,通常要求是大于100位的十進(jìn)制數(shù)。有資料表明,幾十位的素?cái)?shù)構(gòu)造的RSA公鑰密碼系統(tǒng)是不安全的。因?yàn)槲粩?shù)較多,加密效率就不夠高,因此,通常用來加密對(duì)稱密碼的密鑰,例如,加密序列密碼的密鑰。Maple簡介:Maple是一個(gè)具有強(qiáng)大符號(hào)運(yùn)算能力、圖形處理能力的交互式計(jì)算機(jī)代數(shù)系統(tǒng),它可以進(jìn)行各種科學(xué)計(jì)算和數(shù)學(xué)推理,它的高精度數(shù)值計(jì)算能力對(duì)于處理大數(shù)的計(jì)算和素性判定有其獨(dú)特的功能。它適合于所有需要科學(xué)計(jì)算的人.。RSA算法可以實(shí)現(xiàn)數(shù)字簽名。B向A進(jìn)行簽名,則 1、 B不能否認(rèn)進(jìn)行了簽名2、 A不能篡改B的簽名設(shè)A(如網(wǎng)站)的公鑰為,私鑰為 B(簽名者)的公鑰為 ,私鑰為,B的原文m, B用作用m

3、, 得到(m),再用A提供的作用,得到 ,B將C和發(fā)給A, A收到后,先用作用于C再用作用 。這時(shí),B不能否認(rèn)進(jìn)行了簽名,因?yàn)锳用B提供的算出;A不能篡改B的簽名,因?yàn)锽可以用A提供的和算出,而A不知道,改動(dòng)后算不出上面等式。2)、RSA公鑰密碼算法程序流程1、 A的準(zhǔn)備工作(1) 產(chǎn)生兩個(gè)u到v位的隨機(jī)數(shù),如果是偶數(shù),則加1,然后判別是否是素?cái)?shù),如果是,賦值給p,q(2) 令n=pq, t=(p-1)(q-1);(3) 找 滿足 ,找一個(gè)不能整除t的素?cái)?shù),依次試除。(4) 解 相當(dāng)于求解 ,將 輾轉(zhuǎn)相除,得到,利用,再除以t,再賦值給d(5) 將公鑰 n,a發(fā)送給B2、 B的加密過程(1)

4、原文m長度設(shè)為56位,遠(yuǎn)小于n,保證了(m, n)=1, 加密得到密文,分m為十進(jìn)制數(shù)字和字符串兩種情況(2) 將密文s傳送給 A。3、 A的解密過程A收到s后,計(jì)算 得到原文m。直接計(jì)算速度太慢,且溢出,先分別求解 ,然后利用孫子定理解同余式組,它的解 就是原文。反復(fù)利用 來計(jì)算 可以大大加快運(yùn)行速度。3)、基于RSA算法的數(shù)字簽名程序流程B向阿A進(jìn)行數(shù)字簽名。 只需A和B都擁有密鑰生成、加密和解密程序。A運(yùn)行密鑰生成程序,將公鑰EA =n,a發(fā)給B, 將私鑰保密。B運(yùn)行密鑰生成程序,將公鑰EB =n1,a1發(fā)給A, 將私鑰保密。B計(jì)算 簽名m<<minn,n1, 得到,再計(jì)算并

5、將密文C傳送給 A。A收到后,先計(jì)算,再計(jì)算 得到簽名m。三、ELG四、設(shè)計(jì)過程、設(shè)計(jì)的特點(diǎn)和結(jié)果、心得 1)、密鑰生成選出一個(gè)大素?cái)?shù) p選出 d 作為群G = < Zp*, ´ >中的一個(gè)成員, 使得 1 £ d £ p - 2選出 e1作為群 G = < Zp*, ´ > 中的一個(gè)本原根e2  ¬ e1d mod pC2   ¬ (P ´ e2r) mod p         / C1和C

6、2是密文Public_key  ¬  (e1, e2, p)     / 公開宣布Private_key ¬ d              /保密 2)、解密 P ¬ C2 (C1d) -1 mod p  / P 是明文 3)、證明 C2 (C1d) -1 mod p =(P ´ e2r) ´ (e1dr) -1 mod p = P五、實(shí)現(xiàn)環(huán)境Wi

7、ndows xp Maple13 + mapletoolbox+matlab 混合編程六、編寫的源程序代碼 1、RSA_SystemRSA_SYSTEM.mfunction varargout = RSA_SYSTEM(varargin) gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, . 'gui_Singleton', gui_Singleton, . 'gui_OpeningFcn', RSA_SYSTEM_OpeningFcn, . 'gui_OutputFc

8、n', RSA_SYSTEM_OutputFcn, . 'gui_LayoutFcn', , . 'gui_Callback', );if nargin && ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);end if nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end function RSA_SYS

9、TEM_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;X = imread('back.jpg'); subplot('position',-0.00,-0.3,1.0,1.6); imagesc(X); colormap(gray); axis image off; guidata(hObject, handles); function varargout = RSA_SYSTEM_OutputFcn(hObject, eventdata, handles)

10、 varargout1 = handles.output; function primeP_Callback(hObject, eventdata, handles) function primeP_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor') set(hObject,'BackgroundColor','whi

11、te');end function primeQ_Callback(hObject, eventdata, handles) function primeQ_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor') set(hObject,'BackgroundColor','white');end func

12、tion phN_Callback(hObject, eventdata, handles) function phN_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor') set(hObject,'BackgroundColor','white');end function publicN_Callback(h

13、Object, eventdata, handles) function publicN_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor') set(hObject,'BackgroundColor','white');end function PruducPrime_Callback(hObject, eve

14、ntdata, handles) P=maple('nextprime(rand(10120)()');Q=maple('nextprime(rand(10120)()');N=P*Q;phN=(Q-1)*(P-1);set(handles.primeP,'String',char(P)set(handles.primeQ,'String',char(Q)set(handles.publicN,'String',char(N)set(handles.phN,'String',char(phN)set

15、(handles.Private_Key,'Enable','on');set(handles.Selecte_String,'Enable','on');set(handles.SelecteNum,'Enable','on');%計(jì)算私鑰dglobal d ee=216+1;format ratE=1/e;setmaple('e',e);setmaple('E',E);setmaple('n2',phN);setmaple('n',

16、N);d=maple('convert(E,rational) mod n2');setmaple('d',d); function SelecteNum_Callback(hObject, eventdata, handles) FileName,PathName,FilterIndex = uigetfile;if FilterIndex=0global mim=importdata(strcat(PathName,FileName);is=isa(im,'cell');if is=0m=csvread(strcat(PathName,Fil

17、eName);set(handles.Num_Secret,'Enable','on');endif is=1 msgbox('請(qǐng)選擇數(shù)字型文件!','警告:'); endend function Num_Secret_Callback(hObject, eventdata, handles) fidout=fopen('密文.txt','w');global mfor i=1:length(m) M=m(i); setmaple('m',M);C=maple('Power(

18、m,e) mod n');fprintf(fidout,'%snn',char(C); endmsgbox('恭喜!你已成功加密,產(chǎn)生文件為"密文.txt"','溫馨提示:');set(handles.Num_CodeBreak,'Enable','on'); function Num_CodeBreak_Callback(hObject, eventdata, handles) %以下是解密過程fidin=fopen('密文.txt'); fidout=fopen(&#

19、39;明文.txt','w');while feof(fidin) % 判斷是否為文件末尾 tline=fgetl(fidin); % 從文件讀行 if isempty(tline)=0 %若該行非空 midvar=sscanf(tline,'%f'); setmaple('C',tline); m=maple('Power(C,d) mod n') fprintf(fidout,'%snn',char(m); end continue % 如果是非數(shù)字繼續(xù)下一次循環(huán)endfclose(fidout);ms

20、gbox('恭喜!你已成功解密,產(chǎn)生文件為"明文.txt"','溫馨提示:');set(handles.Num_CodeBreak,'Enable','off');set(handles.Num_Secret,'Enable','off'); function Selecte_String_Callback(hObject, eventdata, handles) FileName,PathName,FilterIndex = uigetfile;if FilterIndex=0

21、global pathpath=strcat(PathName,FileName);set(handles.String_Secret,'Enable','on');end function String_Secret_Callback(hObject, eventdata, handles) global path a=importdata(path,'%s');is=isa(a,'double');if is = 1b=cell2mat(a);mm=double(b);fidout1=fopen('密文1.txt

22、9;,'w');for i=1:length(mm) M=mm(i); setmaple('m',M); C=maple('convert(Power(m,e) mod n),binary)'); fprintf(fidout1,'%snn',char(C); endmsgbox('恭喜!你已成功加密,產(chǎn)生文件為"密文1.txt"','溫馨提示:');set(handles.String_CodeBreak,'Enable','on');endif

23、 is=1 msgbox('請(qǐng)選擇字符型文件!','警告:'); set(handles.String_Secret,'Enable','off');end function String_CodeBreak_Callback(hObject, eventdata, handles) fidin=fopen('密文1.txt'); fidout=fopen('明文1.txt','w');while feof(fidin) % 判斷是否為文件末尾 tline=fgetl(fidin);

24、 % 從文件讀行 if isempty(tline)=0 %若該行非空 midvar=sscanf(tline,'%f'); setmaple('C',tline); m=maple('Power(convert(C,decimal,binary),d) mod n'); m=double(m); m=char(m); fprintf(fidout,'%s',m); end continue % 如果是非數(shù)字繼續(xù)下一次循環(huán)endfclose(fidout);msgbox('恭喜!你已成功解密,產(chǎn)生文件為"明文1.

25、txt"','溫馨提示:');set(handles.String_CodeBreak,'Enable','off');set(handles.String_Secret,'Enable','off'); function Private_Key_Callback(hObject, eventdata, handles)global dset(handles.privateKey,'String',char(d); function privateKey_Callback(hObj

26、ect, eventdata, handles) function privateKey_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor') set(hObject,'BackgroundColor','white');end % -function Open_Callback(hObject, eventda

27、ta, handles)uiopen; % -function Close_Callback(hObject, eventdata, handles)close(gcf); % -function ELG_Callback(hObject, eventdata, handles)ELG_SYSTEMdelete(handles.RSA_SYSTEM);2、ELG_SystemELG_SYSTEM.mfunction varargout = ELG_SYSTEM(varargin) gui_Singleton = 1;gui_State = struct('gui_Name',

28、mfilename, . 'gui_Singleton', gui_Singleton, . 'gui_OpeningFcn', ELG_SYSTEM_OpeningFcn, . 'gui_OutputFcn', ELG_SYSTEM_OutputFcn, . 'gui_LayoutFcn', , . 'gui_Callback', );if nargin && ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);end if

29、 nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end function ELG_SYSTEM_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;X = imread('key.jpg'); subplot('position',-0.00,-0.4,1.4,1.7); imagesc(X); colorma

30、p(gray); axis image off; guidata(hObject, handles); function varargout = ELG_SYSTEM_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output; % -function Open_Callback(hObject, eventdata, handles) uiopen; % -function Close_Callback(hObject, eventdata, handles) close(gcf); % -function RSA_C

31、allback(hObject, eventdata, handles) RSA_SYSTEMdelete(handles.ELG_SYSTEM); function primeP_Callback(hObject, eventdata, handles) function primeP_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')

32、set(hObject,'BackgroundColor','white');end function public_ha_Callback(hObject, eventdata, handles) function public_ha_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor') set(hObjec

33、t,'BackgroundColor','white');end function Produce_PublicKey_Callback(hObject, eventdata, handles) function ProduecPublicKey_Callback(hObject, eventdata, handles) global xa p ha p=maple('m := proc (n) global a, q; for a do q := nextprime(rand(10n)(); if isprime(4*q+1) = true then

34、break end if end do; 4*q+1 end proc; m(150)');setmaple('p',p);set(handles.primeP,'String',char(p);xa=maple('rand(10100)()');setmaple('xa',xa);ha=maple('2 & xa mod p');setmaple('ha',ha);set(handles.public_ha,'String',char(ha);set(handles

35、.PrivateOut,'Enable','on');set(handles.Select_String,'Enable','on');set(handles.Select_Num,'Enable','on'); function Select_Num_Callback(hObject, eventdata, handles) FileName,PathName,FilterIndex = uigetfile;if FilterIndex=0global mim=importdata(strcat(

36、PathName,FileName);is=isa(im,'cell');if is=0m=csvread(strcat(PathName,FileName);set(handles.Code_Num,'Enable','on');endif is=1 msgbox('請(qǐng)選擇數(shù)字型文件!','警告:'); endend function Code_Num_Callback(hObject, eventdata, handles) fidout=fopen('密文.txt','w');

37、global mfor i=1:length(m) M=m(i); setmaple('m',M); k=maple('rand(10150)()'); setmaple('k',k);U=maple('2 & k mod p');v=maple('ha & k mod p');setmaple('v',v);V=maple('m*v mod p');fprintf(fidout,'%sn',char(U); fprintf(fidout,'%

38、snn',char(V);endmsgbox('恭喜!你已成功加密,產(chǎn)生文件為"密文.txt"','溫馨提示:');set(handles.Break_Num,'Enable','on'); function Break_Num_Callback(hObject, eventdata, handles) %以下是解密過程fidin=fopen('密文.txt'); fidout=fopen('明文.txt','w'); while feof(fidin)

39、% 判斷是否為文件末尾 tline=fgetl(fidin); % 從文件讀行 if isempty(tline)=0 %若該行非空 t1line='' midvar=sscanf(tline,'%f'); t1line=tline; tline=fgetl(fidin); midvar=sscanf(tline,'%f'); setmaple('C1',t1line); setmaple('C2',tline); m=maple('convert(C2/C1 & xa, rational) mod

40、 p'); fprintf(fidout,'%snn',char(m); end continue % 如果是非數(shù)字繼續(xù)下一次循環(huán)endfclose(fidout);msgbox('恭喜!你已成功解密,產(chǎn)生文件為"明文.txt"','溫馨提示:');set(handles.Code_Num,'Enable','off');set(handles.Break_Num,'Enable','off'); % - Executes on button press

41、in Select_String.function Select_String_Callback(hObject, eventdata, handles) FileName,PathName,FilterIndex = uigetfile;if FilterIndex=0global pathpath=strcat(PathName,FileName);set(handles.Code_String,'Enable','on');end % - Executes on button press in Code_String.function Code_Strin

42、g_Callback(hObject, eventdata, handles) global path a=importdata(path,'%s');is=isa(a,'double');if is = 1b=cell2mat(a);mm=double(b);fidout1=fopen('密文1.txt','w');for i=1:length(mm) M=mm(i); setmaple('m',M); k=maple('rand(10150)()'); setmaple('k',

43、k); U=maple('convert(2 & k mod p,binary)'); v=maple('ha & k mod p'); setmaple('v',v); V=maple('convert(m*v mod p,binary)'); fprintf(fidout1,'%sn',char(U); fprintf(fidout1,'%snn',char(V); endmsgbox('恭喜!你已成功加密,產(chǎn)生文件為"密文1.txt"','溫馨提示:');set(handles.Break_String,'Enable','on');endif is=1 msgbox('請(qǐng)選擇字符型文件!','警告

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論