当前位置:文档之家› 课程报告-非对称加密算法的实现

课程报告-非对称加密算法的实现

课程报告-非对称加密算法的实现
课程报告-非对称加密算法的实现

非对称加密算法的实现

一、设计内容、算法原理

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

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

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

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

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

1(mod ())da n ?≡,然后Alice 将n 、a 作为加密密钥(公钥)发送给Bob, 这里p,q ,

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

Bob 将原文m <

Alice 收到后,计算 ()1()()(mod )d d a d ad n k A A A D E E m m m m n ?+≡≡≡≡≡得到原文

m 。

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

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

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

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

RSA 算法可以实现数字签名。 B 向A 进行签名,则 1、B 不能否认进行了签名 2、A 不能篡改B 的签名

设A (如网站)的公钥为A E ,私钥为A D B(签名者)的公钥为 B E ,私钥为B D ,B 的原文m , B 用B D 作用m , 得到B D (m ),再用A 提供的A E 作用,得

到 (())A B E D m C =,B 将C 和B E 发给A, A 收到后,先用A D 作用于C 再用B E 作用 (())(((()))B A B A A B E D C E D E D m m ==。这时,B 不能否认进行了签名,因为A 用B 提供的B E 算出;A 不能篡改B 的签名,因为B 可以用A 提供的A E 和B D 算出,而A 不知道B D ,改动后算不出上面等式。 2)、RSA 公钥密码算法程序流程 1、A 的准备工作

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

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

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

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

试除。

(4) 解1(mod )ax t ≡ 相当于求解 1ty ax +=,将 ,t a 辗转相除,得到

12,,,n q q q ,利用011121,,k k k k P P q P q P P --===+,(1)n

n x P =-,再除以t ,再赋值

给d

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

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

(mod )a s m n ≡,分m 为十进制数字和字符串两种情况

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

A 收到s 后,计算 (mod )d m s n ≡得到原文m 。直接计算速度太慢,且溢出,

先分别求解 1(m o d )d

b s

p ≡,2(mod )d b s q ≡,然后利用孙子定理解同余式组 1(mod )x b p ≡,2(mod )x b q ≡,它的解111222''(mod )x M M b M M b n ≡+ 就是原文。

反复利用 2d r =+来计算 (mod )d m p 可以大大加快运行速度。 3)、基于RSA 算法的数字签名程序流程

B 向阿A 进行数字签名。 只需A 和B 都拥有密钥生成、加密和解密程序。 A 运行密钥生成程序,将公钥E A ={n,a }发给B, 将私钥{,,,()}A D p q d n ?=保密。

B 运行密钥生成程序,将公钥E B ={n1,a1}发给A, 将私钥{1,1,1,(1)}B D p q d n ?=保密。

B 计算 签名m <

C

D n ≡并将密文C 传送给 A 。

A 收到后,先计算()1()()(())(mod )d a d ad n k A

B B B B D

C C

D D D D n ?+≡≡≡≡≡,再计算

111

11(1)

1()()(m o d 1)

a d a a d n k B D m m m

m n ?+≡≡≡≡ 得到签名m 。 三、ELG

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

选出一个大素数 p

选出 d 作为群G = < Z p *, ? >中的一个成员, 使得 1 ≤ d ≤ p - 2 选出 e 1作为群 G = < Z p *, ? > 中的一个本原根 e 2 ← e 1d mod p

C 2 ← (P ? e 2r ) mod p // C 1和C 2是密文

Public_key ← (e 1, e 2, p ) // 公开宣布 Private_key ← d //保密 2)、解密

P ← [C 2 (C 1d ) -1] mod p // P 是明文 3)、证明

[C 2 (C 1d ) -1] mod p =(P ? e 2r ) ? (e 1dr ) -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类似)

DES算法实验报告

DES算法实验报告 姓名:学号:班级: 一、实验环境 1.硬件配置:处理器(英特尔Pentium双核E5400 @ 2.70GHZ 内存:2G) 2.使用软件: ⑴操作系统:Windows XP 专业版32位SP3(DirectX 9.0C) ⑵软件工具:Microsoft Visual C++ 6.0 二、实验涉及的相关概念或基本原理 1、加密原理 DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。 三、实验内容 1、关键代码 ⑴子密钥产生

⑵F函数以及加密16轮迭代 2、DES加密算法的描述及流程图 ⑴子密钥产生 在DES算法中,每一轮迭代都要使用一个子密钥,子密钥是从用户输入的初始密钥产生的。K是长度为64位的比特串,其中56位是密钥,8位是奇偶校验位,分布在8,16,24,32,40,48,56,64比特位上,可在8位中检查单个错误。在密钥编排计算中只用56位,不包括这8位。子密钥生成大致分为:置换选择1(PC-1)、循环左移、置换选择2(PC-2)等变换,分别产生16个子密钥。 DES解密算法与加密算法是相同的,只是子密钥的使用次序相反。 ⑵DES加密算法 DES密码算法采用Feistel密码的S-P网络结构,其特点是:加密和解密使用同一算法、

现代密码学实验报告

现代密码学 实验报告 学生姓名 学号 专业班级计算机科学与技术指导教师段桂华 学院信息科学与工程学院完成时间2016年4月

实验一密码算法实验 [实验目的] 1.掌握密码学中经典的对称密码算法AES、RC4的算法原理。 2.掌握AES、RC4的算法流程和实现方法。 [实验预备] 1.AES算法的基本原理和特点。 2.流密码RC4的密钥流生成以及S盒初始化过程。 [实验内容] 1. 分析AES、RC4的实现过程。 2. 用程序设计语言将算法过程编程实现。 3. 完成字符串数据的加密运算和解密运算 输入十六进制明文:11223344556677889900AABBCCDDEEFF 输入十六进制密钥:13579BDF02468ACE1234567890ABCDEF [实验步骤] 1. 预习AES、RC4算法。 2. 写出算法流程,用程序设计语言将算法过程编程实现。 3. 输入指定的明文、密钥进行实验,验证结果。 4. 自己选择不同的输入,记录输出结果。 写出所编写程序的流程图和运行界面、运行结果。 一、AES算法 1、AES算法简介 AES 是一种可用来保护电子数据的新型加密算法。特别是,AES 是可以使用128、192 和 256 位密钥的迭代式对称密钥块密码,并且可以对 128 位(16 个字节)的数据块进行加密和解密。与使用密钥对的公钥密码不同的是,对称密钥密码使用同一个密钥来对数据进行加密和解密。由块密码返回的加密数据与输入数据具有相同的位数。迭代式密码使用循环结构来针对输入数据反复执行排列和置换运算。 2、算法实现及流程 以加密函数为例,如下所示,首先对密钥进行预处理密钥扩展,然后明文进行Nr(Nr与密钥长度有关)次迭代运算,包括字节替换SubBytes、移位行运算ShiftRows、混合列运算MixColumns、以及轮秘钥加密AddRoundKey。

数据加密实验报告

实验报告 课程:计算机保密_ _ 实验名称:数据的加密与解密_ _ 院系(部):计科院_ _ 专业班级:计科11001班_ _ 学号: 201003647_ _ 实验日期: 2013-4-25_ _ 姓名: _刘雄 _ 报告日期: _2013-5-1 _ 报告评分:教师签字:

一. 实验名称 数据加密与解密 二.运行环境 Windows XP系统 IE浏览器 三.实验目的 熟悉加密解密的处理过程,了解基本的加密解密算法。尝试编制基本的加密解密程序。掌握信息认证技术。 四.实验内容及步骤 1、安装运行常用的加解密软件。 2、掌握加解密软件的实际运用。 *3、编写凯撒密码实现、维吉尼亚表加密等置换和替换加解密程序。 4、掌握信息认证的方法及完整性认证。 (1)安装运行常用的加解密软件,掌握加解密软件的实际运用 任务一:通过安装运行加密解密软件(Apocalypso.exe;RSATool.exe;SWriter.exe等(参见:实验一指导))的实际运用,了解并掌握对称密码体系DES、IDEA、AES等算法,及非对称密码体制RSA等算法实施加密加密的原理及技术。 ?DES:加密解密是一种分组加密算法,输入的明文为64位,密钥为56位,生成的密文为64位。 ?BlowFish:算法用来加密64Bit长度的字符串或文件和文件夹加密软件。 ?Gost(Gosudarstvennyi Standard):算法是一种由前苏联设计的类似DES算法的分组密码算法。它是一个64位分组及256位密钥的采用32轮简单迭代型加密算法. ?IDEA:国际数据加密算法:使用128 位密钥提供非常强的安全性; ?Rijndael:是带有可变块长和可变密钥长度的迭代块密码(AES 算法)。块长和密钥长度可以分别指定成128、192 或256 位。 ?MISTY1:它用128位密钥对64位数据进行不确定轮回的加密。文档分为两部分:密钥产生部分和数据随机化部分。 ?Twofish:同Blowfish一样,Twofish使用分组加密机制。它使用任何长度为256比特的单个密钥,对如智能卡的微处理器和嵌入在硬件中运行的软件很有效。它允许使用者调节加密速度,密钥安装时间,和编码大小来平衡性能。 ?Cast-256:AES 算法的一种。 (同学们也可自己下载相应的加解密软件,应用并分析加解密过程) 任务二:下载带MD5验证码的软件(如:https://www.doczj.com/doc/c513122590.html,/downloads/installer/下载(MySQL):Windows (x86, 32-bit), MSI Installer 5.6.11、1.5M;MD5码: 20f788b009a7af437ff4abce8fb3a7d1),使用MD5Verify工具对刚下载的软件生成信息摘要,并与原来的MD5码比较以确定所下载软件的完整性。或用两款不同的MD5软件对同一文件提取信息摘要,而后比较是否一致,由此可进行文件的完整性认证。

1密码学-DES实验报告

南京信息工程大学实验(实习)报告实验(实习)名称对称密码实验(实习)日期得分指导教师 系计软院专业网络工程年2011 班次 1 姓名学号20111346026 一.实验目的 1.理解对称加密算法的原理和特点 2.理解DES算法的加密原理 二.实验内容 第一阶段:初始置换IP。在第一轮迭代之前,需要加密的64位明文首先通过初始置换IP 的作用,对输入分组实施置换。最后,按照置换顺序,DES将64位的置换结果分为左右两部分,第1位到第32位记为L0,第33位到第64位记为R0。 第二阶段:16次迭代变换。DES采用了典型的Feistel结构,是一个乘积结构的迭代密码算法。其算法的核心是算法所规定的16次迭代变换。DES算法的16才迭代变换具有相同的结构,每一次迭代变换都以前一次迭代变换的结果和用户密钥扩展得到的子密钥Ki作为输入;每一次迭代变换只变换了一半数据,它们将输入数据的右半部分经过函数f后将其输出,与输入数据的左半部分进行异或运算,并将得到的结果作为新的有半部分,原来的有半部分变成了新的左半部分。用下面的规则来表示这一过程(假设第i次迭代所得到的结果为LiRi): Li = Ri-1; Ri = Li-1⊕f(Ri-1,Ki);在最后一轮左与右半部分并未变换,而是直接将R16 L16并在一起作为未置换的输入。 第三阶段:逆(初始)置换。他是初始置换IP的逆置换,记为IP-1。在对16次迭代的结果(R16 L16)再使用逆置换IP-1后,得到的结果即可作为DES加密的密文Y输出,即Y = IP-1 (R16 L16) 三.流程图&原理图

流程图

DES原理图

AES加密算法实验报告

四川大学计算机学院、软件学院实验报告 学号::专业:班级:第10 周

在程序运行读取需要加密的图片时,需要进行图片的选取,本次实验中使用在弹窗中选取文件的方式,使用头文件commdlg.h来实现在文件夹中选择需要的文件的选取。 三、加密算法流程 AES加密算法流程如下 字节代替:用一个S盒完成分组的字节到字节的代替; 行移位:进行一次行上的置换; 列混合:利用有限域GF(28)上的运算特性的一个代替; 轮密钥加:当前分组和扩展密钥的一部分进行按位异或。

四、代码实现 cryptograph.h #include #include class plaintext { public: plaintext(); static void createplaintext(unsigned char a[]); static void SubBytes(unsigned char p[16]); static void inSubBytes(unsigned char p[16]); static void ShiftRows(unsigned char e[]); static void inShiftRows(unsigned char e[]); static void MatrixToByte(unsigned char e[]); static void inMatrixToByte(unsigned char e[]); static unsigned char FFmul(unsigned char a, unsigned char b); static void KeyAdding(unsigned char state[16], unsigned char k[][4]); static void KeyExpansion(unsigned char* key, unsigned char w[][4][4]); ~plaintext(); private: }; cryptograph.cpp #include"cryptography.h" using namespace std; static unsigned char sBox[] = {};/定义加密S盒/ unsigned char insBox[256] ={};//定义解密S盒 plaintext::plaintext() {

DES加密算法实验报告

苏州科技学院 实验报告 学生姓名:杨刘涛学号:1220126117 指导教师:陶滔 刘学书1220126114 实验地点:计算机学院大楼东309 实验时间:2015-04-20 一、实验室名称:软件实验室 二、实验项目名称:DES加解密算法实现 三、实验学时:4学时 四、实验原理: DES算法由加密、子密钥和解密的生成三部分组成。现将DES算法介绍如下。1.加密 DES算法处理的数据对象是一组64比特的明文串。设该明文串为m=m1m2…m64 (mi=0或1)。明文串经过64比特的密钥K来加密,最后生成长度为64比特的密文E。其加密过程图示如下:

图2-1:DES算法加密过程 对DES算法加密过程图示的说明如下: 待加密的64比特明文串m,经过IP置换(初始置换)后,得到的比特串的下标列表如下: 表2-1:得到的比特串的下标列表

该比特串被分为32位的L0和32位的R0两部分。R0子密钥K1(子密钥的生成将在后面讲)经过变换f(R0,K1)(f变换将在下面讲)输出32位的比特串 f1,f1与L0做不进位的二进制加法运算。运算规则为: f1与L0做不进位的二进制加法运算后的结果赋给R1,R0则原封不动的赋给L1。L1与R0又做与以上完全相同的运算,生成L2,R2……一共经过16次运算。最后生成R16和L16。其中R16为L15与f(R15,K16)做不进位二进制加法运算的结果,L16是R15的直接赋值。 R16与L16合并成64位的比特串。值得注意的是R16一定要排在L16前面。R16与L16合并后成的比特串,经过置换IP-1(终结置换)后所得比特串的下标列表如下: 表2-2:置换后所得比特串的下标列表 经过置换IP-1后生成的比特串就是密文e。 变换f(Ri-1,Ki): 它的功能是将32比特的输入再转化为32比特的输出。其过程如图2-2所示:

AES加密算法实验报告

实验报告 学号:姓名:专业:班级:第10周

简介 #in elude vstri ng> #in elude class pla in text { public : plai ntext(); static void createplaintext( unsigned char a[]); 实验内容(算法、 程 序、 步骤 和方 法)

static void SubBytes( unsigned char p[16]); static void inSubBytes( unsigned char p[16]); static void ShiftRows( unsigned char e[]); static void inShiftRows( unsigned char e[]); static void MatrixToByte( unsigned char e[]); static void inMatrixToByte( unsigned char e[]); static unsigned char FFmul( unsigned char a, unsigned char b); static void KeyAdding( unsigned char state[16], unsigned char k[][4]); static void KeyExpansion( unsigned char* key, unsigned char w[][4][4]); ~plai ntext(); private : }; #in elude "" using namespacestd; static unsigned char sBox[] = {}; /定义加密S盒/ unsigned char insBox[256] ={}; //定义解密S盒 pla in text ::plai ntext() { unsigned int p[16]; for (int j = 0; j<200; j++) { p[i] = a[i]; a[i] = a[i + 16]; } void pla in text ::createpla in text( un sig ned char a[]) // 仓U建明文 int i = 0; if ( a[j] == 0) for (; i<16; i++)

DES实验报告

DES加密算法 一、实验目的 1、理解对称加密算法的原理和特点 2、理解DES算法的加密原理 二、实验步骤 第一阶段:64位明文进行初始置换IP(initial permutation) 第二阶段:在密钥控制下16轮迭代 第三阶段:交换左右32比特 IP 第四阶段:初识逆置换1 三、实验原理 对称密钥机制即对称密钥体系,也称为单钥密码体系和传统密码体系。对称密码体系通常分为两大类,一类是分组密码(如DES、AES算法),另一类是序列密码(如RC4算法)。对称密码体系加密和解密时所用的密钥是相同的或者是类似的,即由加密密钥可以很容易地推导出解密密钥,反之亦然。同时在一个密码系统中,我们不能假定加密算法和解密算法是保密的,因此密钥必须保密。发送信息的通道往往是不可靠的或者不安全的,所以在对称密码系统中,必须用不同于发送信息的另外一个安全信道来发送密钥。 四、实验内容 第一阶段:置换规则如下矩阵,即将输入的第58位换到第一位,第50位换到第2位,...,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是 输出的左32位,R0 是右32位,例:设置换前的输入值為D1D2D3 (64) 则经过初始置换后的结果為:L0=D550...D8;R0=D57D49 (7) 第二阶段: 1、变换密钥 取得64位的密钥,每个第8位作为奇偶校验位,舍弃64位密钥中的奇偶校验位,根据下表PC-1进行密钥变换得到56位的密钥。将变换后的密钥分为两个部分,开始的28位称为C0,最后的28位成为D0。然后同时将C0、D0循环左移1位形成C1、D1。C1D1经过PC-2从56位中选出48位输出,即为K1。循环左移LSi(i=1,2,……,16)分别是: 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1C1、D1分别循环左移LS2位,再合并,经过PC-2,生成子密钥K2。依次类推直至K16形成。 2、加密数据 将32位的RI-1按下表(E)扩展为48位的EI-1: 异或Ei-1和Ki,即E[i-1] XOR K[i],将异或后的结果分为8个6位长的部分,第1

DES算法实验报告

DES算法实验报告 导读:就爱阅读网友为您分享以下“DES算法实验报告”的资讯,希望对您有所帮助,感谢您对https://www.doczj.com/doc/c513122590.html,的支持! 实验报告 姓名:xxxx 学号:0XXXXX 班级:XXXXXXX 日期:2013/11/* 题目:DES算法实验 一、实验环境 1.硬件配置: 处理器:Inter(R) Core(TM) i5-2430M CPU @ 2.40GHz (4

CPUs) ,~2.4GHz 内存:2048MB RAM 2.使用软件: (1) 操作系统:win7 旗舰版 (2) 软件工具: Microsoft Visual c++ 6.0 二、实验涉及的相关概念或基本原理 DES是一个分组密码算法,使用64位密钥(除去8位奇偶校验,实际密钥长度为56位)对64比特的数据分组(二进制数据)加密,产生64位密文数据。DES是一个对称密码体制,加密和解密使用同意密钥,解密和加密使用同一算法(这样,在硬件与软件设计时有利于加密单元的重用)。DES 的所有的保密性均依赖于密钥。 DES的加密过程可分为加密处理,加密变换和子密钥生成几个部分组成。 1.加密处理过程(1)初始置换IP。加密处理首先要对64位的明文按表1所示的初始换位表IP进行变换。表中的数值表示输入位被置换后的新位置。

(2)加密处理。上述换位处理的输出,中间要经过16轮加密变换。初始置换的64位的输出作为下一次的输入,将64位分为左、右两个32位,分别记为L0和R0,从L0、R0到L16、R16,共进行16轮加密变换。其中,经过i轮处理后的点左右32位分别为Li和Ri则可做如下定义: Li=Ri-1 Ri=Li-1 ⊕F(Ri-1,K) 其中,F为F变换 (3)最后换位。进行16轮的加密变换之后,将L16和R16合成64位的数据,再按照表2所示的最后换位表进行IP-1的换位,得到64位的密文,这就是DES算法加密的结果。 2.加密变换过程 64位的密钥先由置换选择1减少至56六位,进行循环左移,然后通过置换选择2减少至48位。而通过扩展运算将32位按表3扩展换位表扩展为48位的右半部分通过异或操作和48位的密钥结合,并分成6位的8个分组,通过8个S-盒

计算机网络安全实验报告--非对称密码算法RSA

实验二非对称密码算法RSA 一、实验目的 通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。 二、实验环境 运行Windows或Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。 三、实验内容和步骤 1)编写一个程序,随机选择3个较大的数x、e、n,然后计算xe mod n, 记录程序运行时间。实际中应用的素数为512位,n也就为1024位。 这样的大数在计算机上如何表示、如何进行运算,查阅资料给出简单说明。 RSA依赖大数运算,目前主流RSA算法都建立在512位到1024位的大数运算之上,所以我们在现阶段首先需要掌握1024位的大数运算原理。 大多数的编译器只能支持到64位的整数运算,即我们在运算中所使用的整数必须小于等于64位,即:0xffffffffffffffff也就是 18446744073709551615,这远远达不到RSA的需要,于是需要专门建立大数运算库来解决这一问题。 最简单的办法是将大数当作字符串进行处理,也就是将大数用10进制字

符数组进行表示,然后模拟人们手工进行“竖式计算”的过程编写其加减乘除函数。但是这样做效率很低,因为1024位的大数其10进制数字个数就有数百个,对于任何一种运算,都需要在两个有数百个元素的数组空间上做多重循环,还需要许多额外的空间存放计算的进位退位标志及中间结果。当然其优点是算法符合人们的日常习惯,易于理解。 另一种思路是将大数当作一个二进制流进行处理,使用各种移位和逻辑操作来进行加减乘除运算,但是这样做代码设计非常复杂,可读性很低,难以理解也难以调试。 (2)计算机在生成一个随机数时,并不一定就是素数,因此要进行素性检测。 是否有确定的方法判定一个大数是素数,要查阅资料,找出目前实际可行的素数判定法则,并且比较各自的优缺点。 所谓素数,是指除了能被1和它本身整除而不能被其他任何数整除的数。 根据素数的定义,只需用2到N-1去除N,如果都除不尽则N是素数,结束知其循环。由此得算法1。 (1)flay=0,i=2. /*flay为标志,其初值为0,只要有一个数除尽,其值变为1. (2)If n mod i=0 then flay=l else i=i+1/* n mod i是n除以i的余数. (3)If flay=0 and I<=n-1 then(2) else go (4) (4)If flay=0 then write“n是素数。”else write“不是素数” 最坏的情形下,即N是素数时,算法1需要执行N-2次除法,时间复杂

AES加密算法实验报告

实验报告 姓名:陈清扬学号:2051313 班级:信息安全日期:2011-04-23 AES加密算法 一、实验环境 1.硬件配置:酷睿i3cpu ,2G内存 2.使用软件: (1) 操作系统:windows7旗舰版 (2) 软件工具:visualc++6.0 二、AES涉及的相关概念或基本原理 简介: 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。 密码说明: 严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支援更大范围的区块和密钥长度:AES的区块长度固定为128 位元,密钥长度则可以是

128,192或256位元;而Rijndael使用的密钥和区块长度可以是32位元的整数倍,以128位元为下限,256位元为上限。加密过程中使用的密钥是由Rijndael密钥生成方案产生。大多数AES计算是在一个特别的有限域完成的。AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“体(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。(Rijndael加密法因支援更大的区块,其矩阵行数可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤: 1AddRoundKey—矩阵中的每一个字节都与该次回合金钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。 2SubBytes—透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。 3ShiftRows—将矩阵中的每个横列进行循环式移位。 4MixColumns—为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每行内的四个字节。 最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。 安全性: 截至2006年,针对AES唯一的成功攻击是旁道攻击。旁道攻击不是攻击密码本身,而是攻击那些实作于不安全系统上的加密系统。

加密解密程序实验报告

程序设计实践 加密解密程序实验报告 课题概述 1.1课题目标和主要内容: 利用MFC类或者win32编写windows程序,实现加密解密的功能。 1.2系统的主要功能: 1.实现用户界面友好的操作。 2.具有对称编码体制,可以实现: i.凯撒密码:能够自定义密钥,自由输入明文,进行加密、解密,在对话框中返回加密和 解密后的内容。

ii.置换密码:能够自定义密钥,自由输入明文,经矩阵变换进行加密、解密,在对话框中返回加密和解密后的内容 iii.对称加密DES:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序加密,解密结果。 3.具有非对称编码体制: i. RSA加密解密:随机产生p,q,经检验是否互质,若不互质接着产生两个随机数,直 到二者互质为止。自动生成p,q,N及加密解密的密钥,可以自由输入明文,返回加密、 解密的内容。 ii. MD5消息摘要计算:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序的加密结果。 4.信息隐藏技术: 用LSB在图片(bmp格式,任意位置的图片)中写入信息,读取信息并显示出来,可 以擦除信息。可以自定义密钥。 5. AES加密解密:用MFC调用WIN32编写的程序,在用户友好界面操作的同时显示程序 加密,解密结果。 6. 以上的所有对文字加密解密的方法(除LSB以外其余所有方法),都可以用于文件加 密,解密,并能够及时保存加密,解密的信息到一个TXT文档,可以存在用户想存放 的地方。 7.更多: 链接了一个可加密解密,功能更为齐全的网站,若是上述方法不能满足用户需求, 可以在程序运行的窗口中点击相应按钮,在联网的条件下进行在线加密解密。 一、系统设计 2.1系统总体框架: 2.2主要的层次逻辑为:

加密技术及密码破解实验报告

第九章、实验报告 实验一、设置Windows启动密码 一、实验目的:利用Windows启动密码保存重要文件。 二、实验步骤: 1、在Windows XP系统中选择开始——运行,在打开输入框中“syskey.exe”,点击确定,打开“保证Windows XP账户数据库的安全”对话框。 2、单击【更新】,打开【启动密码】对话框,然后输入密码,在【确认】文本框中再次输入密码,单击【确定】

实验二、为word文档加密解密 一、实验目的:保护数据的安全 二、实验步骤: 1、打开一个需要加密的文档,选择【工具】——【选项】——【安全性】然后输入想要设置打开文件时所需的密码 2、单击【高级(A)】打开加密类型对话框,选中【加密文档属性】复选框,单击【确定】。 3、打开文件的【确认密码】对话框,输入打开文件时需要的密码,单击【确定】,随即打开【确认密码】对话框,输入密码。 4、保存文件后,重新打开Word文档,打开【密码】,输入打开文件所需的密码,单击【确定】输入修改的密码,单击【确定】

破解word密码 (1)安装Advanced Office Password Recovery软件,安装完成后打开需要破解的word文档,进行暴力破解,结果如图所示: 实验三、使用WinRAR加密解密文件 一.实验目的:加密文件,保证文件的安全性。 二.实验步骤: 1、在需要加密的文件夹上右击,选中【添加到压缩文件】打开【压缩文件名和参数】 2、选中【压缩文件格式】组合框中的【RAR】并在【压缩选项】中选中【压缩后删除源文件】然后切换到【高级】,输入密码,确认密码。

3、关闭对话框,单击确定,压缩完成后,双击压缩文件,系统打开【输入密码对话框】 破解WinRAR加密的文件 (1)安装Advanced RAR Password Recovery软件,打开WinRAR加密文件,进行暴力破解,获得密码。结果如图: 实验四:使用文件夹加密精灵加密文件夹 一、实验目的:对文件进行加密,保证其安全性 二、实验步骤: 1、安装文件夹加密精灵软件,设置登录密码。重新选择【文件加密精灵】,出现登录框。如图

《现代密码学》实验报告

现代密码学实验报告 学生姓名骆秀娟 学号0909121906 专业班级计科1204班 指导教师段桂华 学院信息科学与工程学院 完成时间2014年4月25日

实验一对称密码算法实验 [实验目的] 1.掌握密码学中经典的对称密码算法DES、AES、RC4的算法原理。 2.掌握DES、AES、RC4的算法流程和实现方法。 [实验预备] 1.DES算法有什么特点?算法中的哪些结构保证了其混淆和扩散的特性? 2.AES算法的基本原理和特点。 3.流密码RC4的密钥流生成以及S盒初始化过程。 [实验内容] 1.分析DES、AES、RC4、SHA的实现过程。 2. 用程序设计语言将算法过程编程实现。 3. 完成字符串数据的加密运算和解密运算 输入明文:Idolikethisbook 输入密钥:cryption [实验步骤] 1. 预习DES、AES、RC4算法。 2. 写算法流程,用程序设计语言将算法过程编程实现。 3. 输入指定的明文、密钥进行实验,验证结果。 4. 自己选择不同的输入,记录输出结果。 写出所编写程序的流程图和运行界面、运行结果。

DES程序流程图: DES运行结果:

AES程序流程图: AES运行结果:

RC4流程图:

RC4运行结果: [问题讨论] 1. 在DES算法中有哪些是弱密钥?哪些是半弱密钥? 2. 改变明文或密钥中的一个比特值可能影响AES值中的多少比特? 3.分析实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。 回答问题 解:1>弱密钥有以下几种情况:全0;全1;一半为0,一半为1; 半弱密钥如下:E01F E01F E01F E01F FE01 FE01 FE01 FE01 E001 E001 F101 F101 FE1F FE1F FE01 FE01 2>改变一个比特值最多改变4个AES值。 3>在RC4实验中,为了将输入的char型密钥分个存储进数组中,刚开始我想把它转化为string型,再存储,但是string型数据不能直接从键盘输入,且最后

信息安全实验报告DES加密算法

. 中北大学大学软件学院《网络攻击与防御》 实验报告 课程名称:信息安全技术 实验名称: DES加密算法 指导教师: 班级: 学生姓名: 学号: 实验日期: 16-5-10 16:00-17:45 实验地点:软件学院 实验成绩: 计算机科学与技术学院 计算机系网络教研室制

一、实验目的 通过用DES算法对实际数据进行加密和解密来深刻了解DES的运行原理,进而加深对对称加密算法的理解与认识。 预备知识: 1)数据加密标准(DES,Data Encryption Standard)是一种使用密钥加密的块密码,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。它基于使用56位密钥的对称算法。这个算法因为包含一些机密设计元素,相对短的密钥长度以及怀疑内含美国国家安全局(NSA)的后门而在开始时有争议,因此DES因此受到了强烈的学院派式的审查,并以此推动了现代的块密码及其密码分析的发展。 2) DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。 3)DES算法的安全性,DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。1999年1月,https://www.doczj.com/doc/c513122590.html,与电子前哨基金会合作,在22小时15分钟内即公开破解了一个DES密钥。也有一些分析报告提出了该算法的理论上的弱点,虽然在实际中难以应用。为了提供实用所需的安全性,可以使用DES的派生算法3DES来进行加密,虽然3DES也存在理论上的攻击方法。在2001年,DES作为一个标准已经被高级加密标准(AES)所取代。 4)对称密码算法(Symmetric cipher):加密密钥和解密密钥相同,或实质上等同,即从一个易于推出另一个。又称传统密码算法(Conventional cipher)、秘密密钥算法或单密钥算法。 5)分组密码(Block cipher):将明文分成固定长度的组,用同一密钥和算法对每一块加密,输出也是固定长度的密文。——DES、IDEA、RC2、RC4、RC5 分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。 6)CAP(Cryptographic Analysis Program)是由DR. Richard Spillman专门为教学而研制的密码制作与分析工具,已经在美国的很多高校得到了广泛地使用,受到了密码学习者的普遍欢迎。 二、实验环境 操作系统:运行Windows ,VS2010编译环境。 三、实验内容与实验要求 对学号姓名加解密 任务一:DES加解密算法的原理

密码学实验报告

江苏大学 学院计算机学院 专业信息安全0902 姓名*** 学号3090604035 小组成员*******

AES对称加密算法实现 一.AES对称加密算法实现原理 AES(The Advanced Encryption Standard)接受一个128位的明文,并且在一个128、192或者256位秘密密钥的控制下产生一个128位的密文。它是一个替代-置换网络的设计,并且带有一个称作轮(rand)的步骤的集合,其中轮数可以是9、11或者13(取决于密钥的长度),这样可以将明文映射为密文。 AES实际上能定义为在域GF(2)的元素上的一系列标量的运算。它实质上是在整数模2所组成的域,但是它扩展到了多项式域GF(2)[x]中。为了构造一个域,需要使用一个能够不被任何一个具有相同底GF(2)的度数更小的多项式整除的多项式,在AES中选择了v (x)= x^8 + x^4 + x^3 + x + 1。用整数存储时,它表示值0x11B。域中的加法是一个简单异或(xor)操作。乘法就是乘以其他的多项式。一个单元a的乘法逆元是另一个单元b,使得ab模AES的多项式和多项式p(x)=1是同余的。a(x)=0的逆是它本身。 二.AES对称加密算法实现过程 AES 算法是分组密码算法,它的输入分组、输出分组以及加/ 解密过程中的中间分组都是128比特。(对称密码算法根据对明文消息加密方式的不同可分为两大类,即分组密码和流密码。分组密码将消息分为固定长度的分组,输出的密文分组通常与输入的明文分组长度相同。) 1、AES 的加密与解密框图如图所示 (1) 加密变换

设X是AES 的128 比特明文输入,Y是128 比特的密文输出,则AES 密文Y可以用下面的复合变换表示: Y= Ak(r + 1)·R·S·Akr·C·R·S·Ak(r21)·?·C·R·S·Ak1 (X)其中“·”表示复合运算。这里Aki :表示对X 的一个变换Aki (X) = XY Ki (Ki 为第i 轮的子密钥,为比特串的异或运算) 。S:S 盒置换。即对每一个字节用S2Box 做一个置换。S2Box 是一个给定的转换表。R: 行置换。C: 列置换。 s′(x) = a (x) á s (x) 这里á 是特殊的乘法运算 (2) 解密变换 解密变换是加密变换的逆变换。 2、AES(128bits密钥)加密解密流程如下图所示

201641843222-李烁-网络安全实验报告

1实验一 1.1实验目的、要求 1、掌握及理解常用的对称分组加密算法的基本流程,如置换、异或、代替操作。 2、深入分析常见对称分组加密算法包括DES、AES。 1.2实验原理 DES 使用一个56 位的密钥以及附加的8 位奇偶校验位(每组的第8位作为奇偶校验位),产生最大64 位的分组大小。这是一个迭代的分组密码,使用称为Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用16 轮循环,使用异或,置换,代换,移位操作四种基本运算。 三重DES(3DES),使用168 (56*3)位的密钥对资料进行三次加密(3次使用DES)的一种机制;它通常(但非始终)提供极其强大的安全性。如果三个56 位的子元素都相同,则三重DES 向后兼容DES。 AES加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“状态(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。(Rijndael 加密法因支持更大的区块,其矩阵行数可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤: AddRoundKey —矩阵中的每一个字节都与该次轮秘钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。 SubBytes —通过个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。 ShiftRows —将矩阵中的每个横列进行循环式移位。 MixColumns —为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每列的四个字节。 最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。 1.3主要设备、器材 硬件环境:Intel i7/4GRAM/500G HDD

信息安全与保密DRS加密算法实验报告

实验报告 课程名称信息安全与保密 实验项目名称实验二DES加密算法 班级与班级代码08信管2班082511012 实验室名称(或课室)实验大楼809 专业 2008信息管理与信息系统2班任课教师郑心炜 学号:082511012** 姓名:黄** 机器号码:5组C(周三) 实验日期:2011年3月30日 广东商学院教务处制

姓名黄** 实验报告成绩 评语: 指导教师(签名) 年月日说明:指导教师评分后,实验报告交院(系)办公室保存。

实验二 DES加密算法 一、实验目的 1.理解对称加密算法的原理和特点 2.理解DES和AES算法的加密原理 二、实验环境 Windows虚拟机、网络信息安全教学平台 三、实验工具 CIS工具箱——该实验使用加密解密工具。 四、实验原理 对称密钥加密机制即对称密码体系,也称为单钥密码体系和传统密码体系。对称密码体系通常分为两大类,一类是分组密码(如DES、AES 算法),另一类是序列密码(如RC4算法)。 对称密码体系加密和解密时所用的密钥是相同的或者是类似的,即由加密密钥可以很容易地推导出解密密钥,反之亦然。同时在一个密码系统中,我们不能假定加密算法和解密算法是保密的,因此密钥必须保密。发送信息的通道往往是不可靠的或者不安全的,所以在对称密码系统中,必须用不同于发送信息的另外一个安全信道来发送密钥。图2-1-1描述了对称密码(传统密码)系统原理框架,其中M表示明文;C表示密文;E表示加密算法;D表示解密算法;K表示密钥;I表示密码分析员进行密码分析时掌握的相关信息;B表示密码分析员对明文M的分析和猜测。 五、实验步骤 (1)打开windows虚拟机的网络信息安全教学平台的密码工具,输入八位十进制的密码和密钥。密码是:51101249;密钥是:51101249. (2)DES的加密过程

AES加密算法实验报告

实验报告 学号:姓名:专业:班级:第 10 周

static void SubBytes(unsigned char p[16]); static void inSubBytes(unsigned char p[16]); static void ShiftRows(unsigned char e[]); static void inShiftRows(unsigned char e[]); static void MatrixToByte(unsigned char e[]); static void inMatrixToByte(unsigned char e[]); static unsigned char FFmul(unsigned char a, unsigned char b); static void KeyAdding(unsigned char state[16], unsigned char k[][4]); static void KeyExpansion(unsigned char* key, unsigned char w[][4][4]); ~plaintext(); private: }; #include"" using namespace std; static unsigned char sBox[] = {};/定义加密S盒/ unsigned char insBox[256] ={};//定义解密S盒 plaintext::plaintext() { } void plaintext::createplaintext(unsigned char a[])//创建明文 { int i = 0; unsigned int p[16]; for (int j = 0; j<200; j++) { if (a[j] == 0) { break; } } for (; i<16; i++) { p[i] = a[i]; a[i] = a[i + 16];

密码学-DES实验报告

南京信息工程大学实验(实习)报告实验(实习)名称实验(实习)日期得分指导教师------ 系计算机专业软件工程年2011 班次 3 姓名唐一鑫学号24 一.实验目的 1.理解对称加密算法的原理和特点 2.理解DES算法的加密原理 二.实验内容 第一阶段:初始置换IP。在第一轮迭代之前,需要加密的64位明文首先通过初始置换IP 的作用,对输入分组实施置换。最后,按照置换顺序,DES将64位的置换结果分为左右两部分,第1位到第32位记为L0,第33位到第64位记为R0。 第二阶段:16次迭代变换。DES采用了典型的Feistel结构,是一个乘积结构的迭代密码算法。其算法的核心是算法所规定的16次迭代变换。DES算法的16才迭代变换具有相同的结构,每一次迭代变换都以前一次迭代变换的结果和用户密钥扩展得到的子密钥Ki作为输入;每一次迭代变换只变换了一半数据,它们将输入数据的右半部分经过函数f后将其输出,与输入数据的左半部分进行异或运算,并将得到的结果作为新的有半部分,原来的有半部分变成了新的左半部分。用下面的规则来表示这一过程(假设第i次迭代所得到的结果为LiRi): Li = Ri-1; Ri = Li-1⊕f(Ri-1,Ki);在最后一轮左与右半部分并未变换,而是直接将R16 L16并在一起作为未置换的输入。 第三阶段:逆(初始)置换。他是初始置换IP的逆置换,记为IP-1。在对16次迭代的结果(R16 L16)再使用逆置换IP-1后,得到的结果即可作为DES加密的密文Y输出,即Y = IP-1 (R16 L16)

三.流程图&原理图 流程图

DES原理图

相关主题
相关文档 最新文档