网络课程设计

南 华 大 学

网 络 安

题目:RSA加解密算法 姓名 学号:

导师: 全

非对称加密算法的实现

非对称密码系统即公钥密码系统,主流分为基于大整数分解难度,基于离散

一、设计内容、算法原理

对数计算难度和椭圆曲线公钥密码三类。本次实验主要介绍RSA 、ELG加密。 二、RSA

1).RSA公钥密码算法原理和过程:

Alice要求Bob将信息m用RSA方法加密传送回来,

Alice找到大素数p,q, 令n=pq, 取a>1满足 (a,(n))1,再找d使得

da1(mod(n)),然后

Alice将n、a作为加密密钥(公钥)发送给Bob, 这里p,q,

d,(n)都是私钥,要求保密,用作解密。

Bob 将原文m

这里大素数要求足够大,通常要求是大于100位的十进制数。有资料表明,几

十位的素数构造的RSA公钥密码系统是不安全的。因为位数较多,加密效率就不

d

d

并将密文m(modn),

aa

d

ad

EA传送给 Alice。

得到原文

DA(EA)EA(m)m

m

(n)k1

m(modn)

够高,因此,通常用来加密对称密码的密钥,例如,加密序列密码的密钥。

Maple简介:Maple是一个具有强大符号运算能力、图形处理能力的交互式计算机代数系统,它可以进行各种科学计算和数学推理,它的高精度数值计算能力对于处理大数的计算和素性判定有其独特的功能。它适合于所有需要科学计算的人.。

RSA算法可以实现数字签名。 B向A进行签名,则

1、B不能否认进行了签名 2、A不能篡改B的签名

设A(如网站)的公钥为EA,私钥为DA B(签名者)的公钥为 EB,私钥为DB,B的原文m, B用DB作用m , 得到DB(m),再用A提供的EA作用,得到 EA(DB(m))C,B将C和EB发给A, A收到后,先用DA作用于C再用EB作用 EB(DA(C))

B不能否认进行了签名,因为AEB(DA(EA(DB(m))。)这时,m

用B提供的EB算出;A不能篡改B的签名,因为B可以用A提供的EA和DB算出,而A不知道DB,改动后算不出上面等式。 2)、RSA公钥密码算法程序流程 1、A的准备工作

(1) 产生两个u到v位的随机数,如果是偶数,则加1,然后判别是否是

素数,如果是,赋值给p,q

(2) 令n=pq, t=(p-1)(q-1);

(3) 找1amin{p1,q1} 满足 (a,t)1,找一个不能整除t的素数,依次

试除。

(4) 解

ax1(modt)

相当于求解

tyax1

,将 t,a辗转相除,得到

n

利用P01,P1q1,PkqkPk1Pk2,x(1)Pn,再除以q1,q2,,qn,给d

(5) 将公钥 n,a发送给B 2、B的加密过程

t,再赋值

(1) 原文m长度设为56位,远小于n,保证了(m, n)=1, 加密得到密文

sm(modn),分

a

m为十进制数字和字符串两种情况

(2) 将密文s传送给 A。 3、A的解密过程

A收到s后,计算 先分别求解

d

ms(modn)

d

d

得到原文m。直接计算速度太慢,且溢出,

b1s(modp,)b2s(modq),然后利用孙子定理解同余式组

xb1(modp)

,xb2(modq),它的解xM1M1'b1M2M2'b2(modn) 就是原文。

2

反复利用

dr

来计算 m(modp)可以大大加快运行速度。

d

3)、基于RSA算法的数字签名程序流程

B向阿A进行数字签名。 只需A和B都拥有密钥生成、加密和解密程序。 A运行密钥生成程序,将公钥EA ={n,a}发给B, 将私钥DA

密。

B运行密钥生成程序,将公钥EB ={n1,a1}发给A, 将私钥DB

保密。

B计算 签名m

将密文C传送给 A。

A收到后,先计算DA(C)(C)d

(DB)(m

a1

d1

{p,q,d,(n)}保

{p1,q1,d1,(n1)}

再计算C(DB)(modn)并m(modn1),

d1

a

((DB))DB

adad

DB

(n)k1

再计算 DB(modn),

)m

a1a1d1

m

(n1k)

得到签名m(modn1)

1m。

三、ELG

四、设计过程、设计的特点和结果、心得 1)、密钥生成

选出一个大素数 p

选出 d 作为群G  中的一个成员, 使得 1 d p 2 选出 e1作为群 G  中的一个本原根 e2  e1d mod p

C2 P  e2r) mod p // C1和C2是密文

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 五、实现环境

Windows xp

Maple13 + mapletoolbox+matlab 混合编程

六、编写的源程序代码 1、RSA_System

RSA_SYSTEM.m

function varargout = 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', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

function RSA_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); axis image off;

guidata(hObject, handles);

function varargout = RSA_SYSTEM_OutputFcn(hObject, eventdata, handles) varargout{1} = 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','white');

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

function 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(hObject, 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, 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 global d e e=2^16+1; format rat E=1/e;

setmaple('e',e); setmaple('E',E); setmaple('n2',phN); setmaple('n',N);

d=maple('convert(E,rational) mod n2'); setmaple('d',d);

function SelecteNum_Callback(hObject, eventdata, handles)

[FileName,PathName,FilterIndex] = uigetfile; if FilterIndex~=0 global m

im=importdata(strcat(PathName,FileName)); is=isa(im,'cell'); if is==0

m=csvread(strcat(PathName,FileName)); set(handles.Num_Secret,'Enable','on'); end if is==1

msgbox('请选择数字型文件!','警告:'); end end

function Num_Secret_Callback(hObject, eventdata, handles)

fidout=fopen('密文.txt','w'); global m

for i=1:length(m) M=m(i);

setmaple('m',M);

C=maple('Power(m,e) mod n');

fprintf(fidout,'%s\n\n',char(C)); end

msgbox('恭喜!你已成功加密,产生文件为"密文.txt"','温馨提示:'); set(handles.Num_CodeBreak,'Enable','on');

function Num_CodeBreak_Callback(hObject, eventdata, handles)

%以下是解密过程

fidin=fopen('密文.txt'); fidout=fopen('明文.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,'%s\n\n',char(m)); end

continue % 如果是非数字继续下一次循环 end

fclose(fidout);

msgbox('恭喜!你已成功解密,产生文件为"明文.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 global path

path=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 ~= 1 b=cell2mat(a); mm=double(b);

fidout1=fopen('密文1.txt','w'); for i=1:length(mm) M=mm(i);

setmaple('m',M);

C=maple('convert((Power(m,e) mod n),binary)'); fprintf(fidout1,'%s\n\n',char(C)); end

msgbox('恭喜!你已成功加密,产生文件为"密文1.txt"','温馨提示:'); set(handles.String_CodeBreak,'Enable','on'); end if is==1

msgbox('请选择字符型文件!','警告:'); 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); % 从文件读行 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 % 如果是非数字继续下一次循环 end

fclose(fidout);

msgbox('恭喜!你已成功解密,产生文件为"明文1.txt"','温馨提示:'); set(handles.String_CodeBreak,'Enable','off'); set(handles.String_Secret,'Enable','off');

function Private_Key_Callback(hObject, eventdata, handles) global d

set(handles.privateKey,'String',char(d));

function privateKey_Callback(hObject, 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, eventdata, handles) uiopen;

%

-------------------------------------------------------------------- function Close_Callback(hObject, eventdata, handles) close(gcf); %

-------------------------------------------------------------------- function ELG_Callback(hObject, eventdata, handles) ELG_SYSTEM

delete(handles.RSA_SYSTEM);

2、ELG_System

ELG_SYSTEM.m

function varargout = 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', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1: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); colormap(gray); axis image off;

guidata(hObject, handles);

function varargout = ELG_SYSTEM_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

%

--------------------------------------------------------------------

function Open_Callback(hObject, eventdata, handles)

uiopen;

%

--------------------------------------------------------------------

function Close_Callback(hObject, eventdata, handles)

close(gcf);

%

--------------------------------------------------------------------

function RSA_Callback(hObject, eventdata, handles)

RSA_SYSTEM

delete(handles.ELG_SYSTEM);

function primeP_Callback(hObject, eventdata, handles)

function primeP_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

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(hObject,'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(10^n))());

if isprime(4*q+1) = true then break end if end do; 4*q+1 end proc; m(150)');

setmaple('p',p);

set(handles.primeP,'String',char(p));

xa=maple('rand(10^100)()');

setmaple('xa',xa);

ha=maple('2 &^ xa mod p');

setmaple('ha',ha);

set(handles.public_ha,'String',char(ha));

set(handles.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~=0

global m

im=importdata(strcat(PathName,FileName));

is=isa(im,'cell');

if is==0

m=csvread(strcat(PathName,FileName));

set(handles.Code_Num,'Enable','on');

end

if is==1

msgbox('请选择数字型文件!','警告:');

end

end

function Code_Num_Callback(hObject, eventdata, handles)

fidout=fopen('密文.txt','w');

global m

for i=1:length(m)

M=m(i);

setmaple('m',M);

k=maple('rand(10^150)()');

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,'%s\n',char(U));

fprintf(fidout,'%s\n\n',char(V));

end

msgbox('恭喜!你已成功加密,产生文件为"密文.txt"','温馨提示:');

set(handles.Break_Num,'Enable','on');

function Break_Num_Callback(hObject, eventdata, handles)

%以下是解密过程

fidin=fopen('密文.txt');

fidout=fopen('明文.txt','w');

while ~feof(fidin) % 判断是否为文件末尾 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 p');

fprintf(fidout,'%s\n\n',char(m));

end

continue % 如果是非数字继续下一次

循环

end

fclose(fidout);

msgbox('恭喜!你已成功解密,产生文件为"明文.txt"','温馨提示:');

set(handles.Code_Num,'Enable','off');

set(handles.Break_Num,'Enable','off');

% --- Executes on button press in Select_String.

function Select_String_Callback(hObject, eventdata, handles)

[FileName,PathName,FilterIndex] = uigetfile;

if FilterIndex~=0

global path

path=strcat(PathName,FileName);

set(handles.Code_String,'Enable','on');

end

% --- Executes on button press in Code_String.

function Code_String_Callback(hObject, eventdata, handles)

global path

a=importdata(path,'%s');

is=isa(a,'double');

if is ~= 1

b=cell2mat(a);

mm=double(b);

fidout1=fopen('密文1.txt','w');

for i=1:length(mm)

M=mm(i);

setmaple('m',M);

k=maple('rand(10^150)()');

setmaple('k',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,'%s\n',char(U));

fprintf(fidout1,'%s\n\n',char(V));

end

msgbox('恭喜!你已成功加密,产生文件为"密文1.txt"','温馨提示:');

set(handles.Break_String,'Enable','on');

end

if is==1

msgbox('请选择字符型文件!','警告:');

set(handles.Break_String,'Enable','off');

end

% --- Executes on button press in Break_String.

function Break_String_Callback(hObject, eventdata, handles)

fidin=fopen('密文1.txt');

fidout=fopen('明文1.txt','w');

while ~feof(fidin) % 判断是否为文件末尾 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('Power(convert(C2,decimal,binary),d) mod n');

m=maple('convert(convert(C2,decimal,binary)/convert(C1,decimal,binary)

&^ xa, rational) mod p');

m=double(m);

m=char(m);

fprintf(fidout,'%s',m);

end

continue % 如果是非数字继续下一次

循环

end

fclose(fidout);

msgbox('恭喜!你已成功解密,产生文件为"明文1.txt"','温馨提示:');

set(handles.Code_String,'Enable','off');

set(handles.Break_String,'Enable','off');

% --- Executes on button press in PrivateOut.

function PrivateOut_Callback(hObject, eventdata, handles)

global xa

set(handles.Private_Key,'String',char(xa));

function Private_Key_Callback(hObject, eventdata, handles)

function Private_Key_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

附:RSA运行演示(ELG类似

)

南 华 大 学

网 络 安

题目:RSA加解密算法 姓名 学号:

导师: 全

非对称加密算法的实现

非对称密码系统即公钥密码系统,主流分为基于大整数分解难度,基于离散

一、设计内容、算法原理

对数计算难度和椭圆曲线公钥密码三类。本次实验主要介绍RSA 、ELG加密。 二、RSA

1).RSA公钥密码算法原理和过程:

Alice要求Bob将信息m用RSA方法加密传送回来,

Alice找到大素数p,q, 令n=pq, 取a>1满足 (a,(n))1,再找d使得

da1(mod(n)),然后

Alice将n、a作为加密密钥(公钥)发送给Bob, 这里p,q,

d,(n)都是私钥,要求保密,用作解密。

Bob 将原文m

这里大素数要求足够大,通常要求是大于100位的十进制数。有资料表明,几

十位的素数构造的RSA公钥密码系统是不安全的。因为位数较多,加密效率就不

d

d

并将密文m(modn),

aa

d

ad

EA传送给 Alice。

得到原文

DA(EA)EA(m)m

m

(n)k1

m(modn)

够高,因此,通常用来加密对称密码的密钥,例如,加密序列密码的密钥。

Maple简介:Maple是一个具有强大符号运算能力、图形处理能力的交互式计算机代数系统,它可以进行各种科学计算和数学推理,它的高精度数值计算能力对于处理大数的计算和素性判定有其独特的功能。它适合于所有需要科学计算的人.。

RSA算法可以实现数字签名。 B向A进行签名,则

1、B不能否认进行了签名 2、A不能篡改B的签名

设A(如网站)的公钥为EA,私钥为DA B(签名者)的公钥为 EB,私钥为DB,B的原文m, B用DB作用m , 得到DB(m),再用A提供的EA作用,得到 EA(DB(m))C,B将C和EB发给A, A收到后,先用DA作用于C再用EB作用 EB(DA(C))

B不能否认进行了签名,因为AEB(DA(EA(DB(m))。)这时,m

用B提供的EB算出;A不能篡改B的签名,因为B可以用A提供的EA和DB算出,而A不知道DB,改动后算不出上面等式。 2)、RSA公钥密码算法程序流程 1、A的准备工作

(1) 产生两个u到v位的随机数,如果是偶数,则加1,然后判别是否是

素数,如果是,赋值给p,q

(2) 令n=pq, t=(p-1)(q-1);

(3) 找1amin{p1,q1} 满足 (a,t)1,找一个不能整除t的素数,依次

试除。

(4) 解

ax1(modt)

相当于求解

tyax1

,将 t,a辗转相除,得到

n

利用P01,P1q1,PkqkPk1Pk2,x(1)Pn,再除以q1,q2,,qn,给d

(5) 将公钥 n,a发送给B 2、B的加密过程

t,再赋值

(1) 原文m长度设为56位,远小于n,保证了(m, n)=1, 加密得到密文

sm(modn),分

a

m为十进制数字和字符串两种情况

(2) 将密文s传送给 A。 3、A的解密过程

A收到s后,计算 先分别求解

d

ms(modn)

d

d

得到原文m。直接计算速度太慢,且溢出,

b1s(modp,)b2s(modq),然后利用孙子定理解同余式组

xb1(modp)

,xb2(modq),它的解xM1M1'b1M2M2'b2(modn) 就是原文。

2

反复利用

dr

来计算 m(modp)可以大大加快运行速度。

d

3)、基于RSA算法的数字签名程序流程

B向阿A进行数字签名。 只需A和B都拥有密钥生成、加密和解密程序。 A运行密钥生成程序,将公钥EA ={n,a}发给B, 将私钥DA

密。

B运行密钥生成程序,将公钥EB ={n1,a1}发给A, 将私钥DB

保密。

B计算 签名m

将密文C传送给 A。

A收到后,先计算DA(C)(C)d

(DB)(m

a1

d1

{p,q,d,(n)}保

{p1,q1,d1,(n1)}

再计算C(DB)(modn)并m(modn1),

d1

a

((DB))DB

adad

DB

(n)k1

再计算 DB(modn),

)m

a1a1d1

m

(n1k)

得到签名m(modn1)

1m。

三、ELG

四、设计过程、设计的特点和结果、心得 1)、密钥生成

选出一个大素数 p

选出 d 作为群G  中的一个成员, 使得 1 d p 2 选出 e1作为群 G  中的一个本原根 e2  e1d mod p

C2 P  e2r) mod p // C1和C2是密文

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 五、实现环境

Windows xp

Maple13 + mapletoolbox+matlab 混合编程

六、编写的源程序代码 1、RSA_System

RSA_SYSTEM.m

function varargout = 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', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

function RSA_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); axis image off;

guidata(hObject, handles);

function varargout = RSA_SYSTEM_OutputFcn(hObject, eventdata, handles) varargout{1} = 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','white');

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

function 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(hObject, 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, 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 global d e e=2^16+1; format rat E=1/e;

setmaple('e',e); setmaple('E',E); setmaple('n2',phN); setmaple('n',N);

d=maple('convert(E,rational) mod n2'); setmaple('d',d);

function SelecteNum_Callback(hObject, eventdata, handles)

[FileName,PathName,FilterIndex] = uigetfile; if FilterIndex~=0 global m

im=importdata(strcat(PathName,FileName)); is=isa(im,'cell'); if is==0

m=csvread(strcat(PathName,FileName)); set(handles.Num_Secret,'Enable','on'); end if is==1

msgbox('请选择数字型文件!','警告:'); end end

function Num_Secret_Callback(hObject, eventdata, handles)

fidout=fopen('密文.txt','w'); global m

for i=1:length(m) M=m(i);

setmaple('m',M);

C=maple('Power(m,e) mod n');

fprintf(fidout,'%s\n\n',char(C)); end

msgbox('恭喜!你已成功加密,产生文件为"密文.txt"','温馨提示:'); set(handles.Num_CodeBreak,'Enable','on');

function Num_CodeBreak_Callback(hObject, eventdata, handles)

%以下是解密过程

fidin=fopen('密文.txt'); fidout=fopen('明文.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,'%s\n\n',char(m)); end

continue % 如果是非数字继续下一次循环 end

fclose(fidout);

msgbox('恭喜!你已成功解密,产生文件为"明文.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 global path

path=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 ~= 1 b=cell2mat(a); mm=double(b);

fidout1=fopen('密文1.txt','w'); for i=1:length(mm) M=mm(i);

setmaple('m',M);

C=maple('convert((Power(m,e) mod n),binary)'); fprintf(fidout1,'%s\n\n',char(C)); end

msgbox('恭喜!你已成功加密,产生文件为"密文1.txt"','温馨提示:'); set(handles.String_CodeBreak,'Enable','on'); end if is==1

msgbox('请选择字符型文件!','警告:'); 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); % 从文件读行 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 % 如果是非数字继续下一次循环 end

fclose(fidout);

msgbox('恭喜!你已成功解密,产生文件为"明文1.txt"','温馨提示:'); set(handles.String_CodeBreak,'Enable','off'); set(handles.String_Secret,'Enable','off');

function Private_Key_Callback(hObject, eventdata, handles) global d

set(handles.privateKey,'String',char(d));

function privateKey_Callback(hObject, 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, eventdata, handles) uiopen;

%

-------------------------------------------------------------------- function Close_Callback(hObject, eventdata, handles) close(gcf); %

-------------------------------------------------------------------- function ELG_Callback(hObject, eventdata, handles) ELG_SYSTEM

delete(handles.RSA_SYSTEM);

2、ELG_System

ELG_SYSTEM.m

function varargout = 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', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1: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); colormap(gray); axis image off;

guidata(hObject, handles);

function varargout = ELG_SYSTEM_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

%

--------------------------------------------------------------------

function Open_Callback(hObject, eventdata, handles)

uiopen;

%

--------------------------------------------------------------------

function Close_Callback(hObject, eventdata, handles)

close(gcf);

%

--------------------------------------------------------------------

function RSA_Callback(hObject, eventdata, handles)

RSA_SYSTEM

delete(handles.ELG_SYSTEM);

function primeP_Callback(hObject, eventdata, handles)

function primeP_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

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(hObject,'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(10^n))());

if isprime(4*q+1) = true then break end if end do; 4*q+1 end proc; m(150)');

setmaple('p',p);

set(handles.primeP,'String',char(p));

xa=maple('rand(10^100)()');

setmaple('xa',xa);

ha=maple('2 &^ xa mod p');

setmaple('ha',ha);

set(handles.public_ha,'String',char(ha));

set(handles.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~=0

global m

im=importdata(strcat(PathName,FileName));

is=isa(im,'cell');

if is==0

m=csvread(strcat(PathName,FileName));

set(handles.Code_Num,'Enable','on');

end

if is==1

msgbox('请选择数字型文件!','警告:');

end

end

function Code_Num_Callback(hObject, eventdata, handles)

fidout=fopen('密文.txt','w');

global m

for i=1:length(m)

M=m(i);

setmaple('m',M);

k=maple('rand(10^150)()');

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,'%s\n',char(U));

fprintf(fidout,'%s\n\n',char(V));

end

msgbox('恭喜!你已成功加密,产生文件为"密文.txt"','温馨提示:');

set(handles.Break_Num,'Enable','on');

function Break_Num_Callback(hObject, eventdata, handles)

%以下是解密过程

fidin=fopen('密文.txt');

fidout=fopen('明文.txt','w');

while ~feof(fidin) % 判断是否为文件末尾 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 p');

fprintf(fidout,'%s\n\n',char(m));

end

continue % 如果是非数字继续下一次

循环

end

fclose(fidout);

msgbox('恭喜!你已成功解密,产生文件为"明文.txt"','温馨提示:');

set(handles.Code_Num,'Enable','off');

set(handles.Break_Num,'Enable','off');

% --- Executes on button press in Select_String.

function Select_String_Callback(hObject, eventdata, handles)

[FileName,PathName,FilterIndex] = uigetfile;

if FilterIndex~=0

global path

path=strcat(PathName,FileName);

set(handles.Code_String,'Enable','on');

end

% --- Executes on button press in Code_String.

function Code_String_Callback(hObject, eventdata, handles)

global path

a=importdata(path,'%s');

is=isa(a,'double');

if is ~= 1

b=cell2mat(a);

mm=double(b);

fidout1=fopen('密文1.txt','w');

for i=1:length(mm)

M=mm(i);

setmaple('m',M);

k=maple('rand(10^150)()');

setmaple('k',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,'%s\n',char(U));

fprintf(fidout1,'%s\n\n',char(V));

end

msgbox('恭喜!你已成功加密,产生文件为"密文1.txt"','温馨提示:');

set(handles.Break_String,'Enable','on');

end

if is==1

msgbox('请选择字符型文件!','警告:');

set(handles.Break_String,'Enable','off');

end

% --- Executes on button press in Break_String.

function Break_String_Callback(hObject, eventdata, handles)

fidin=fopen('密文1.txt');

fidout=fopen('明文1.txt','w');

while ~feof(fidin) % 判断是否为文件末尾 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('Power(convert(C2,decimal,binary),d) mod n');

m=maple('convert(convert(C2,decimal,binary)/convert(C1,decimal,binary)

&^ xa, rational) mod p');

m=double(m);

m=char(m);

fprintf(fidout,'%s',m);

end

continue % 如果是非数字继续下一次

循环

end

fclose(fidout);

msgbox('恭喜!你已成功解密,产生文件为"明文1.txt"','温馨提示:');

set(handles.Code_String,'Enable','off');

set(handles.Break_String,'Enable','off');

% --- Executes on button press in PrivateOut.

function PrivateOut_Callback(hObject, eventdata, handles)

global xa

set(handles.Private_Key,'String',char(xa));

function Private_Key_Callback(hObject, eventdata, handles)

function Private_Key_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

附:RSA运行演示(ELG类似

)


相关文章

  • 圆锥-圆柱齿轮减速器(含零件图装配图)
  • 机械设计课程设计 2013-2014第2学期 姓 名:_______________ 班 级:__________________ 指导老师:__________________ 成 绩:__________________ 日期:2014 ...查看


  • 室内设计 课程标准
  • 理实一体课程(非项目课程) CAD.3DMAX.室内设计课程标准 课程编码:1903119 课程类别:专业核心课 适用专业:艺术设计 授课单位:传媒艺术系 学时: 75节 编写执笔人及编写日期:周霏 2016年1月30日 审定负责人及审定日 ...查看


  • 内燃机设计课程设计-
  • <内燃机设计课程设计- 发动机运动学与动力学仿真分析>教学大纲 课程编号:048130 时间安排:3周 适用专业:热能与动力(本科) 一.课程设计的目的及要求 课程设计是使学生全面.系统掌握和深化内燃机设计课程的基本步骤和方法的 ...查看


  • 网络课程知识点
  • 第一章 网络课程设计与开发概述 1. 课程定义a :课程是指为达到一定的培养目标所需要的全部教学内容和教学计划.(何 克抗) 教学内容:主要指教材(文字或电子)及相关的教学资源. 教学计划:包括讲课.自学.实验.辅导.答疑.作业.考试等. ...查看


  • 电子技术课程设计计划书.课程设计报告
  • <电子技术>课程设计计划书 一.课程设计的总体目标 电子技术课程是一门专业技术基础课,电子技术课程设计是电子技术课程理论教学之 后的一个实践教学环节.其目的是训练学生综合运用学过的电子技术原理的基础知识,独立进行查找资料.选择方 ...查看


  • 计算机平面设计专业教学计划
  • 山东省计算机平面设计专业教学指导方案 教学计划 一.专业名称 计算机平面设计 二.专业代码 090300 三.招生对象与学制 (一)招生对象 初中毕业生或同等及以上学历者,热爱艺术计,无色盲.色弱. (二)学制三年 四.培养目标 本专业主要 ...查看


  • 房地产策划课程设计教学大纲
  • <房地产策划课程设计>教学大纲 课程代码:0420037 课程名称:房地产策划课程设计 学时:32 学分:2.0 课程类别:集中实践环节选修课 开设专业:工程管理 一.目的和性质 <房地产策划课程设计>是在课堂理论教 ...查看


  • 机械设计课程设计教学改革与创新
  • [摘要]机械设计课程设计是机械类本科教学中的一个重要的实践环节.本文针对我校机械设计课程设计过程中存在的问题,结合作者在课程设计中的教学经验,论证了对课程设计进行改革的重要性与必要性,并提出了一些具体改革措施. [关键词]机械课程:设计:创 ...查看


  • 电子商务课程设计实施细则
  • 浙江广播电视大学 电子商务专业课程设计实施细则 一.课程设计的目的 课程设计是电子商务专业的主要实践性教学环节之一,是围绕一门主要基础课或专业课,运用所学课程的知识,结合实际应用设计而进行的一次综合分析设计能力的训练. 课程设计旨在培养学生 ...查看


  • 水泵与水泵站课程设计的教学体会 1
  • 水泵与水泵站课程设计的教学体会 作者:吕廷波 李明思 李淼 蓝明菊 来源:<中国电力教育>2014年第06期 摘要:水泵与水泵站课程设计是农业水利工程专业实践教学的重要组成部分,是学生对课程内容融会贯通,对所学知识加以实践应用的 ...查看


热门内容