人人范文网 范文大全

网络课程设计

发布时间:2020-03-03 05:29:06 来源:范文大全 收藏本文 下载本文 手机版

南 华 大 学

网 络 安

题目: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公钥密码系统是不安全的。因为位数较多,加密效率就不

dd并将密文m(modn),aadadEA传送给 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),分am为十进制数字和字符串两种情况

(2) 将密文s传送给 A。

3、A的解密过程

A收到s后,计算 先分别求解 dms(modn)dd得到原文m。直接计算速度太慢,且溢出,b1s(modp,)b2s(modq),然后利用孙子定理解同余式组 xb1(modp),xb2(modq),它的解xM1M1\'b1M2M2\'b2(modn) 就是原文。

2反复利用 d[d]r来计算 m(modp)可以大大加快运行速度。

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

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

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

B计算 签名m

A收到后,先计算DA(C)(C)d(DB)(ma1d1{p,q,d,(n)}保

{p1,q1,d1,(n1)}再计算C(DB)(modn)并m(modn1),d1a((DB))DBadadDB(n)k1再计算 DB(modn),

)ma1a1d1m(n1k) 得到签名m(modn1)1m。

三、ELG

四、设计过程、设计的特点和结果、心得

1)、密钥生成

选出一个大素数 p

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

2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=canf(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=canf(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=canf(tline,\'%f\');

t1line=tline;

tline=fgetl(fidin);

midvar=canf(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 pre 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 pre 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 pre 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=canf(tline,\'%f\');

t1line=tline;

tline=fgetl(fidin);

midvar=canf(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 pre 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类似)

网络课程设计

网络课程设计

网络课程设计

网络课程设计

网络课程设计论文

网络课程设计题目

网络课程设计报告

无线传感网络课程设计

公司网络工程设计课程设计

网络课程设计总结[推荐]

网络课程设计
《网络课程设计.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档