非对称加密算法的实现.docx
- 文档编号:30769539
- 上传时间:2023-08-23
- 格式:DOCX
- 页数:27
- 大小:829.37KB
非对称加密算法的实现.docx
《非对称加密算法的实现.docx》由会员分享,可在线阅读,更多相关《非对称加密算法的实现.docx(27页珍藏版)》请在冰豆网上搜索。
非对称加密算法的实现
非对称加密算法的实现
一、设计内容、算法原理
非对称密码系统即公钥密码系统,主流分为基于大整数分解难度,基于离散对数计算难度和椭圆曲线公钥密码三类。
本次实验主要介绍RSA、ELG加密。
二、RSA
1).RSA公钥密码算法原理和过程:
Alice要求Bob将信息m用RSA方法加密传送回来,
Alice找到大素数p,q,令n=pq,取a>1满足
,再找d使得
,然后Alice将n、a作为加密密钥(公钥)发送给Bob,这里p,q,d,
都是私钥,要求保密,用作解密。
Bob将原文m< ,并将密文EA传送给Alice。 Alice收到后,计算 得到原文m。 这里大素数要求足够大,通常要求是大于100位的十进制数。 有资料表明,几十位的素数构造的RSA公钥密码系统是不安全的。 因为位数较多,加密效率就不够高,因此,通常用来加密对称密码的密钥,例如,加密序列密码的密钥。 Maple简介: Maple是一个具有强大符号运算能力、图形处理能力的交互式计算机代数系统,它可以进行各种科学计算和数学推理,它的高精度数值计算能力对于处理大数的计算和素性判定有其独特的功能。 它适合于所有需要科学计算的人.。 RSA算法可以实现数字签名。 B向A进行签名,则 1、B不能否认进行了签名 2、A不能篡改B的签名 设A(如网站)的公钥为 ,私钥为 B(签名者)的公钥为 ,私钥为 ,B的原文m,B用 作用m,得到 (m),再用A提供的 作用,得到 ,B将C和 发给A,A收到后,先用 作用于C再用 作用 。 这时,B不能否认进行了签名,因为A用B提供的 算出;A不能篡改B的签名,因为B可以用A提供的 和 算出,而A不知道 ,改动后算不出上面等式。 2)、RSA公钥密码算法程序流程 1、A的准备工作 (1)产生两个u到v位的随机数,如果是偶数,则加1,然后判别是否是素数,如果是,赋值给p,q (2)令n=pq,t=(p-1)(q-1); (3)找 满足 ,找一个不能整除t的素数,依次试除。 (4)解 相当于求解 ,将 辗转相除,得到 ,利用 再除以t,再赋值给d (5)将公钥n,a发送给B 2、B的加密过程 (1)原文m长度设为56位,远小于n,保证了(m,n)=1,加密得到密文 ,分m为十进制数字和字符串两种情况 (2)将密文s传送给A。 3、A的解密过程 A收到s后,计算 得到原文m。 直接计算速度太慢,且溢出,先分别求解 , ,然后利用孙子定理解同余式组 , ,它的解 就是原文。 反复利用 来计算 可以大大加快运行速度。 3)、基于RSA算法的数字签名程序流程 B向阿A进行数字签名。 只需A和B都拥有密钥生成、加密和解密程序。 A运行密钥生成程序,将公钥EA={n,a}发给B,将私钥 保密。 B运行密钥生成程序,将公钥EB={n1,a1}发给A,将私钥 保密。 B计算签名m< ,再计算 并将密文C传送给A。 A收到后,先计算 ,再计算 得到签名m。 三、ELG 四、设计过程、设计的特点和结果、心得 1)、密钥生成 选出一个大素数p 选出d作为群G= 选出e1作为群G= e2 ←e1dmodp C2 ←(P⨯e2r)modp //C1和C2是密文 Public_key ← (e1,e2,p) //公开宣布 Private_key←d //保密 2)、解密 P←[C2(C1d)-1]modp //P是明文 3)、证明 [C2(C1d)-1]modp=(P⨯e2r)⨯(e1dr)-1modp=P 五、实现环境 Windowsxp Maple13+mapletoolbox+matlab混合编程 六、编写的源程序代码 1、RSA_System RSA_SYSTEM.m functionvarargout=RSA_SYSTEM(varargin) gui_Singleton=1; gui_State=struct('gui_Name',mfilename,... 'gui_Singleton',gui_Singleton,... 'gui_OpeningFcn',@RSA_SYSTEM_OpeningFcn,... 'gui_OutputFcn',@RSA_SYSTEM_OutputFcn,... 'gui_LayoutFcn',[],... 'gui_Callback',[]); ifnargin&&ischar(varargin{1}) gui_State.gui_Callback=str2func(varargin{1}); end ifnargout [varargout{1: nargout}]=gui_mainfcn(gui_State,varargin{: }); else gui_mainfcn(gui_State,varargin{: }); end functionRSA_SYSTEM_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); axisimageoff; guidata(hObject,handles); functionvarargout=RSA_SYSTEM_OutputFcn(hObject,eventdata,handles) varargout{1}=handles.output; functionprimeP_Callback(hObject,eventdata,handles) functionprimeP_CreateFcn(hObject,eventdata,handles) ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end functionprimeQ_Callback(hObject,eventdata,handles) functionprimeQ_CreateFcn(hObject,eventdata,handles) ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end functionphN_Callback(hObject,eventdata,handles) functionphN_CreateFcn(hObject,eventdata,handles) ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end functionpublicN_Callback(hObject,eventdata,handles) functionpublicN_CreateFcn(hObject,eventdata,handles) ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end functionPruducPrime_Callback(hObject,eventdata,handles) P=maple('nextprime(rand(10^120)())'); Q=maple('nextprime(rand(10^120)())'); 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(handles.Private_Key,'Enable','on'); set(handles.Selecte_String,'Enable','on'); set(handles.SelecteNum,'Enable','on'); %计算私钥d globalde e=2^16+1; formatrat E=1/e; setmaple('e',e); setmaple('E',E); setmaple('n2',phN); setmaple('n',N); d=maple('convert(E,rational)modn2'); setmaple('d',d); functionSelecteNum_Callback(hObject,eventdata,handles) [FileName,PathName,FilterIndex]=uigetfile; ifFilterIndex~=0 globalm im=importdata(strcat(PathName,FileName)); is=isa(im,'cell'); ifis==0 m=csvread(strcat(PathName,FileName)); set(handles.Num_Secret,'Enable','on'); end ifis==1 msgbox('请选择数字型文件! ','警告: '); end end functionNum_Secret_Callback(hObject,eventdata,handles) fidout=fopen('密文.txt','w'); globalm fori=1: length(m) M=m(i); setmaple('m',M); C=maple('Power(m,e)modn'); fprintf(fidout,'%s\n\n',char(C)); end msgbox('恭喜! 你已成功加密,产生文件为"密文.txt"','温馨提示: '); set(handles.Num_CodeBreak,'Enable','on'); functionNum_CodeBreak_Callback(hObject,eventdata,handles) %以下是解密过程 fidin=fopen('密文.txt'); fidout=fopen('明文.txt','w'); while~feof(fidin)%判断是否为文件末尾 tline=fgetl(fidin);%从文件读行 ifisempty(tline)==0%若该行非空 midvar=sscanf(tline,'%f'); setmaple('C',tline); m=maple('Power(C,d)modn') fprintf(fidout,'%s\n\n',char(m)); end continue%如果是非数字继续下一次循环 end fclose(fidout); msgbox('恭喜! 你已成功解密,产生文件为"明文.txt"','温馨提示: '); set(handles.Num_CodeBreak,'Enable','off'); set(handles.Num_Secret,'Enable','off'); functionSelecte_String_Callback(hObject,eventdata,handles) [FileName,PathName,FilterIndex]=uigetfile; ifFilterIndex~=0 globalpath path=strcat(PathName,FileName); set(handles.String_Secret,'Enable','on'); end functionString_Secret_Callback(hObject,eventdata,handles) globalpath a=importdata(path,'%s'); is=isa(a,'double'); ifis~=1 b=cell2mat(a); mm=double(b); fidout1=fopen('密文1.txt','w'); fori=1: length(mm) M=mm(i); setmaple('m',M); C=maple('convert((Power(m,e)modn),binary)'); fprintf(fidout1,'%s\n\n',char(C)); end msgbox('恭喜! 你已成功加密,产生文件为"密文1.txt"','温馨提示: '); set(handles.String_CodeBreak,'Enable','on'); end ifis==1 msgbox('请选择字符型文件! ','警告: '); set(handles.String_Secret,'Enable','off'); end functionString_CodeBreak_Callback(hObject,eventdata,handles) fidin=fopen('密文1.txt'); fidout=fopen('明文1.txt','w'); while~feof(fidin)%判断是否为文件末尾 tline=fgetl(fidin);%从文件读行 ifisempty(tline)==0%若该行非空 midvar=sscanf(tline,'%f'); setmaple('C',tline); m=maple('Power(convert(C,decimal,binary),d)modn'); m=double(m); m=char(m); fprintf(fidout,'%s',m); end continue%如果是非数字继续下一次循环 end fclose(fidout); msgbox('恭喜! 你已成功解密,产生文件为"明文1.txt"','温馨提示: '); set(handles.String_CodeBreak,'Enable','off'); set(handles.String_Secret,'Enable','off'); functionPrivate_Key_Callback(hObject,eventdata,handles) globald set(handles.privateKey,'String',char(d)); functionprivateKey_Callback(hObject,eventdata,handles) functionprivateKey_CreateFcn(hObject,eventdata,handles) ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end %-------------------------------------------------------------------- functionOpen_Callback(hObject,eventdata,handles) uiopen; %-------------------------------------------------------------------- functionClose_Callback(hObject,eventdata,handles) close(gcf); %-------------------------------------------------------------------- functionELG_Callback(hObject,eventdata,handles) ELG_SYSTEM delete(handles.RSA_SYSTEM); 2、ELG_System ELG_SYSTEM.m functionvarargout=ELG_SYSTEM(varargin) gui_Singleton=1; gui_State=struct('gui_Name',mfilename,... 'gui_Singleton',gui_Singleton,... 'gui_OpeningFcn',@ELG_SYSTEM_OpeningFcn,... 'gui_OutputFcn',@ELG_SYSTEM_OutputFcn,... 'gui_LayoutFcn',[],... 'gui_Callback',[]); ifnargin&&ischar(varargin{1}) gui_State.gui_Callback=str2func(varargin{1}); end ifnargout [varargout{1: nargout}]=gui_mainfcn(gui_State,varargin{: }); else gui_mainfcn(gui_State,varargin{: }); end functionELG_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); colormap(gray); axisimageoff; guidata(hObject,handles); functionvarargout=ELG_SYSTEM_OutputFcn(hObject,eventdata,handles) varargout{1}=handles.output; %-------------------------------------------------------------------- functionOpen_Callback(hObject,eventdata,handles) uiopen; %-------------------------------------------------------------------- functionClose_Callback(hObject,eventdata,handles) close(gcf); %-------------------------------------------------------------------- functionRSA_Callback(hObject,eventdata,handles) RSA_SYSTEM delete(handles.ELG_SYSTEM); functionprimeP_Callback(hObject,eventdata,handles) functionprimeP_CreateFcn(hObject,eventdata,handles) ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end functionpublic_ha_Callback(hObject,eventdata,handles) functionpublic_ha_CreateFcn(hObject,eventdata,handles) ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end functionProduce_PublicKey_Callback(hObject,eventdata,handles) functionProduecPublicKey_Callback(hObject,eventdata,handles) globalxapha p=maple('m: =proc(n)globala,q;foradoq: =nextprime((rand(10^n))());ifisprime(4*q+1)=truethenbreakendifenddo;4*q+1endproc;m(150)'); setmaple('p',p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对称 加密算法 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)