文档库 最新最全的文档下载
当前位置:文档库 › AES加密反馈式硬件结构的实现及sv测试平台搭建

AES加密反馈式硬件结构的实现及sv测试平台搭建

AES加密反馈式硬件结构的实现及sv测试平台搭建
AES加密反馈式硬件结构的实现及sv测试平台搭建

AES加密的反馈式硬件结构实现

赵重阳

于2016.3.4完成全部编写调试工作及报告的撰写总计十天Rijndael的AES加密算法属于加密算法中的私钥加密算法,其特点是算法简便,加密过程和解密过程对称,速度快,吞吐量大。在效率方面要由于非对称加密的的公钥加密体系,如ECC加密,RSA加密等。其密钥长度在之前的DES加密基础上做了延伸,涵盖128位,192位,256位三种密码长度,安全性较之DES 更强。

由于AES加密是私钥匙加密,故在主加密过程开始之前需要产生加密所需的密钥。我们会输入一个种子密钥,通过密钥扩展过程产生一个加密所需的密钥。

128、192、256位所需的种子密钥依次是4行(一行32bit,称为一个字),6行和8行,主加密过程轮数依次是10、12,14。密钥扩展的过程主要包括下面三个阶段:行左移、字节替换、异或,之后再与前面一行密钥做异或得到新的一行密钥。我们用NR来表示种子密钥的行数,ROUND来表示加密过程的轮数。

算法的软件代码如下:

for (int i = NR; i < NK * (ROUND + 1); i++)

{

TEMP temp;

temp = w[i-1]; //在上一行密钥的基础上扩展

if (i%NR == 0){ //如果扩展的轮数可以整除NR

rotWord(temp);

subWord(sbox, temp);

makeXor(i,temp);?

}

else if ((NR == 8) && (i%NR == 4))

{

subWord(sbox,temp);

}

w[i] = temp[j] ^ w[i - NR]; //最后与前NR行做异或

一、密钥扩展模块

考虑密钥扩展模块的硬件实现结构,没有必要使用ROUND个相同的流水线电路结构来实现该模块,非反馈的流水线方式可以提高电路的吞吐量和效率,但是面积和占用的资源会很大。因为在同一个加密过程中密钥一般是不变的,所以在密钥扩展过程一般只运行一次即可,没有必要做成流水线结构。我们使用一个计数器来记下扩展的轮数,使用反馈式的电路结构,将每一轮的输出连接至轮输入,轮数作为循环反馈工作的判断条件来使电路正常工作。

密钥扩展模块的硬件设计框图如下所示:

本文中实现的加密算法密钥长度为192位,故密钥扩展需要

NK*(ROUND+1)-NR轮,需要45个时钟周期,在加上读取种子密钥的一个时钟周期,共46个时钟周期后得到密钥输出。

二、密钥扩展系统的输入输出,及重要信号的时序图,及RTL仿真结果:

2.1 重要信号:

<1> 端口信号:

输入INPUT:

时钟信号:clk

复位信号:reset

密钥种子:key_seed [5:0][31:0]

扩展启动信号:key_begin

输出OUTPUT:

扩展密钥: key_out [51:0][31:0]

扩展结束信号:key_done

<2> 内部寄存器信号:

现态寄存器:currentstate enum 类型 次态寄存器:nextstate enum 类型 扩展轮数寄存信号:counter [5:0] 轮常数寻址信号:rcon_i [3:0]

<3> 内部memory 及LUT : Rcon [10:0][31:0] 存放轮常数 Uk0_sbox 实例化的sbox 模块用于一行中一个字节替换 Uk1_sbox 同上 Uk2_sbox 同上 Uk3_sbox 同上

2.2 时序设计:

T

i m e G e n D e m o T

i m e G e n D e m o T i m e G e n D e m o T i m e G e n D e m o 1 2

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

TimeGen Demo T i m e G e

n D e m

o T i m e

G e n D e m o

T i m e G e n D e m o T i m

e G e n

D e m o T

i m e G e n D e m o

T i m e G e n D e m o

T i m e G e n

D e m o T i m e G e n D e m o

TimeGen Demo T i m e G e n D e m o

T i m e G e n D e m o

00000000000000000000000

32'H7AF66D6D

IDLE

READSEED EXPANDSIX

EXPANDO

REPEAT 8 TIMES

LASTROW IDLE

TimeGen

Clock RESET KEY_SEED KEY_BEGIN

CURRENT_STATE

T

i

m e G e n D

e m o T

i

m e G e n D

e m o 1

2 3

4 5 6

7 8 9 10 11 12

13 14 15

16 17 18

TimeGen Demo T i m e G e

n D e m o T i m e

G e n D e m o

T i m e G e n D e m o T i m e

G e

n D e m o T i m

e

G e n D e m o

T i m e G e n D e m o T i

m e G e n D e m o T i m e

G e n D e m o

TimeGen Demo T i m e G e n D e m o

T i m e G e n

D e m o

IDLE

EXPANDSIX EXPANDO

READSEED LASTROW

IDLE

REPEAT 8 TIMES 0

12

9

67

89A

B

C 'H33

每个周期装入一行

0000000000000000000

全部输出

TimeGen

NEXT_STATE

COUNTER ROCON_I KEY_DONE KEY_OUT

2.3 RTL仿真结果

该仿真中的种子密钥使用随机数发生器获得,为

:7AF66D6D_4CE92F76_B8E7C823_92D49422_500803F0_A4503228

经过硬件密钥扩展后的仿真结果为:

51 : 43b4c843 49d305bd 18d78b8f c7d3a48f

47 : 1954e63c 63698dbb 0a67cdfe 51048e32

43 : df042f00 675d4f5b 7a3d6b87 690e4045

39 : 5b6343cc 8e00a132 b859605b 00225881

35 : 13332bc2 326d0389 d563e2fe 3659c169

31 : b87b38da e3d37dfc 215e284b e70ee177

27 : e33a2397 8e22f9b3 5ba84526 abe7ce01

23 : c650c93c 0434c2e0 6d18da24 d58abc95

19 : f04f8b27 f03a25b5 c2640bdc 692c18c4

15 : b89266b1 25c537b2 0075ae92 b711a390

11 : ab481318 d1be7e75 9d575103 25b09920

7 : b7640d02 e76c0ef2 7af66d6d 4ce92f76

3 : b8e7c823 92d49422 500803f0 a4503228

2.4软件验证:

编写C语言AES 加密程序,将相同的种子密钥输入,经过软件密钥扩展后得到的密钥调度表为:

其结果与我们硬件仿真的结果完全相同,证明了密钥扩展模块的正确性。

三、主加密模块:

3.1 主加密模块原理(循环内部流水线原理)

主加密模块采用的电路结构与密钥扩展模块相似,加密需要ROUND+1轮,本文中ROUND为12,也是采用非反馈模式,即没有为每一轮都重新赋值一次相同的电路结构。但cipher模块的电路却与上文中的不完全相同,因为我设计的cipher电路为了最大程度上提高电路的并行工作能力,并且考虑到了寄存器资源和面积的问题,我采用了内部流水线结构。我将加密主模块中的轮运算:字节替换、字节移位、列混合、轮密钥加这四个运算的中间结果做了寄存,如果单单加密一组数据即128字节(4个字),那么对中间结果做寄存那么只是简化了每一级的组合逻辑,用寄存器资源的增加消除了组合逻辑的竞争与险象,在提高时钟频率时使得输出更加可靠。但是,我注意到内部增加了四个寄存器,便可以很方便的将其设计为循环结构的四级流水线。那么,输入明文的字宽可以增加到16个字,事实上4级循环流水线最多也只能同时处理16字的数据量,循环的过程中4组数据依次读入,第一组数据在加密的进度上最快,后面的数据总比前面一组慢一步。比如:第一组的数据加密过程进行到了第8轮的轮密钥加,得到了第8轮轮密钥加的寄存结果。这时第二组数据进行到了第八轮的列混合并得到了列混合的结果。事实上,第一组数据和第四组数据的加密过程紧密首尾咬合,一个时钟周期也不能错。在第n个clk上升沿,第一组数据将第i步的结果进行计算

得到第i+1步结果;于此同时第四组数据将第i-3步的结果进行计算得到第i-2结

果。细心可以发现,第i+1和第i-3步在循环结构里表示同一个点。这中一步也不能差的循环内部流水线反馈结构最大程度上保证了资源的复用和数据并行的协调。

3.2 循环内部流水线结构图

3.3 cipher模块输入输出信号及重要内部信号、memory、LUT

<1> 端口信号

输入信号:

时钟信号:clk

置位信号:reset

输入明文:textIn [15:0][31:0]

输入种子:key_seed [5:0][31:0]

密钥开始:key_begin

加密开始:cipher_begin

输出信号:

加密忙:cipher_busy

加密完成:cipher_done

密钥完成:key_done

密文输出:cipher_out [15:0][31:0]

<2> 内部重要信号

钥匙:Cipher_key [51:0][31:0]

流水迭代次数信号:iterator [7:0]

现态信号:currentstate {Idle,Precipher,ciphering,lastroud,done}

次态信号:nextstate {Idle,Precipher,ciphering,lastroud,done}

密钥调度表指针: wn [7:0] wire信号

输入明文指针:textInPtr [4:0]

输出密文指针:textOut[4:0]

轮密钥加寄存信号:logic [3:0][31:0] state_add;

字节替换寄存信号:logic [3:0][31:0] state_sub;

状态移位寄存信号:logic [3:0][31:0] state_shift;

列混合寄存信号:logic [3:0][31:0] state_mix;

<3> 内部memory及LUT

uc00_sbox,uc01_sbox,uc02_sbox,uc03_sbox;

Uc10_sbox,uc11_sbox,uc12_sbox,uc13_sbox

Uc20_sbox,uc21_sbox,uc22_sbox,uc23_sbox

Uc30_sbox,uc31_sbox,uc32_sbox,uc33_sbox

u_key_expand

3.4 列混合组合电路的设计及GF(256)乘法

列混合是对态数组中的每一列与一个固定多项式c(x)= ‘03’x^3+’01’x^2+’01’x^1+’02’,之后再模x^4+1,来保证结果的正确性。那么就有了三个运算,就是GF(256)乘1,乘2,乘3。乘1的结果就是它本身,乘2的规则如下:

若被乘数小于0x80那么结果为被乘数左移一位;如果被乘数大于等于0x80,那么被乘数左移一位后在异或0x1b。

该逻辑若采用一般的比较被乘数与0x80的大小来实现,则综合出的电路很复杂。我们直接使用组合逻辑来实现,那就有了:

Gfmulti02={b[6:0],1’b0}^{8’h1b&8{{b[7]}}};

小于0x80则最高为为0,与任何数相与都为0,再与移位后的结果相异或,得到的结果就是移位后的结果;若大于等于0x80,最高位b[7]为1,与后的结果就是0x1b。最终结果是移位后再异或0x1b。

用一个简单的函数来实现gfmulti02,

function [7:0] gfmulti02;

input [7:0] x;

begin

gfmulti02={x[6:0],1'b0} ^ (8'h1b&{8{x[7]}}); //a^1=a~ a^0=a;

end

endfunction

至于Gfmul03(x)就等于Gfmulti02(x)^(x)。

3.5 状态机的设计(四组数据在加密的第i轮处于不同的步骤,如何控制其正确的读取密钥调度表进行运算——iterator的判断条件、状态划分、wn的

变化)亮点在于此

主要是第一轮及最后一轮,看起来简单,但是确实仿真了很多次,经历了一个状态一个状态查错的过程。

状态机的状态包括:Idle,Precipher,Ciphering,LastRound,Done.

Idle: 在Idle状态中电路中的各个中间寄存器state_add,state_sub,state_mix,state_shift都锁存其值;iterator,wn,textIn_ptr,textOut_ptr都置0;等待key_begin拉高后进入Precipher状态。

Precipher: 这个状态中循环流水电路开始进行工作,依次在连续的4个时钟周期内读入4组块数据,使得电路中的寄存器都被数据“占据”;于此同时cipher_busy拉高,表示电路已经处于工作状态,外部输入端口不可再增加第五组输入数据,iterator迭代寄存器开始迭代。值得注意的是,此时的addroundkey 寄存器输入端口接的是数据state的组合逻辑运算值。循环结构还未行成。

Ciphering: 循环加密的状态,循环流水电路开始工作state_add的输入端接state_mix的组合逻辑结果,行成闭环。电路工作一直进行到iterator等于’d47的时候,即到了下一个时钟上升沿就进行轮密钥加输出的时候。这样设计确保了下个状态中立刻就能得到最终的加密结果,并且轮循环中addroundkey的部分各组数据都能在密钥调度表中使用正确的密钥。

LastRound:最后一个状态中iterator一次迭代到’d51,连续四个周期输出加密后的密文。这时候是将shift后的结果做轮密钥加,其值赋给cipher_out,利用textOut_ptr做寻址,在相应的位置填入数据。

必须注意!!!这一轮中虽然没有mixcolumn操作,但是mixcolumn寄存器还寄存着第四组数据!!!电路仍需要仍需要将这组数据取出,第四组数据还处于前一轮的状态,还需要对它做轮密钥加操作,密钥当然是上一轮的密钥[wn-4,wn-1]。

Done:在这个状态中cipher_done拉高表示加密完成,cipher_out锁存自己使输出密文稳定,并跳至Idle状态,等待下一个cipher_begin拉高。

3.6 时序设计及状态转换图

3.7 系统测试平台的搭建

针对待测设计DUT,我使用system verilog编写了测试激励,并在适当的时刻给DUT加上激励。测试平台和DUT的框图如下:

整个test_bench包括三个initial begin模块,分别是为了控制textIn队列的生成、加密主过程和仿真结束控制。

使用两个class,分别为seed_gen,text_gen来产生随机的种子包和明文包,在队列生成的模块中将随机化100次,将这100次的明文依次装入队列中待使用。

Rand bit [`NR-1:0][31:0] seed;

rand bit [15:0][31:0] text;

repeat(nrPkts) begin

tgen = new;

assert(tgen.randomize());

$display("------------------the %4dth text of %4d pkts-------------------"

,i+1,nrPkts);

i=i+1;

tgen.show();

foreach(tgen.text[j])

text_que.push_back(tgen.text[j]);

End

在加密过程的initial begin模块中实例化seed_gen类而得到一个随机化的种子,将种子赋给DUT的输入端口key_seed,

assert(sg.randomize());

sg.show();

seed_temp=sg.seed;

ck.reset<=0;

#(10);

ck.reset<=1;

#(40) ck.key_seed <= seed_temp;

#(50) ck.key_begin <= 1;

#(5) ck.key_begin <= 0;

等待密钥扩展完成后紧接着就是向DUT连续按照协议输入nrPkts个明文数据包。当cipher_busy拉低的时候从队列中弹出一个明文数据包给DUT的textIn 作为输入,同时拉高cipher_begin进行一个数据包的加密过程,(***值得注意的是***)在加密开始后软件程序的循环部分需要等待硬件代码中的cipher_busy 拉高后才进行下一个循环判断,否则会立刻进入下一个循环,又从队列中弹出一个明文数据包。

//loop generations

for(i=0;i!=nrPkts;i++) begin

//if ciphering , cipher_begin =0

while(cipher_busy||!key_done) begin

@(posedge clk)

cipher_begin<=0;

end

if(!cipher_busy) begin

foreach(text_temp[j])

text_temp[j] = text_que.pop_front();

##(1);

@(posedge clk)

textIn<=text_temp; //延迟了两个周期后,cipher_begin拉高,textIn赋值

cipher_begin<=1;

end

//waiting for cipher_busy pull high

while(!cipher_busy) begin

##(1);

end

End

(详细代码请见zcy文件夹的questa_project中编写的的aes_tb.v)

3.8 RTL仿真结果

可以看到cipher_begin拉高后进入Precipher,并依次读入text到state_add,textIn_ptr依次加4,cipher_busy拉高。进入ciphering后,每四个时钟周期转一圈。

输入四组明文,依次是:

15 : 01707676 037bbb95 8e38c04c 01606da3

11 : 2620b09a ccb9ff39 f9a29a0b 969703b3

7 : f46a0004 d9d728c2 65c6b64b 778f722e

3 : a3c263d5 ceb07427 d716e5d0 23a470d9

硬件机密后仿真后得到的加密结果为:

15 : b8c76024 ea0e5334 3ed4dd9e 1d4d4d7e

11 : 04a16bf1 814abb04 401e2cab d7ac65b3

7 : c3662e6c b9c3f609 0407d44b db99d72d

3 : ac2a662

4 886ace0e d2e714eb ec6e837b

3.9 软件验证

输入相同的明文并使用相同的种子,软件验证结果为:

得到的结果与硬件仿真的结果完全正确,整个系统正确性得到了验证!

文件加密与解密实验报告

HUNAN UNIVERSITY 程序设计训练——文件加密与解密 报告 学生姓名X X X 学生学号20110102308 专业班级建环308 指导老师何英 2012-07-01至 2012-07-13

一、程序设计目的和要求 (3) 二、程序设计内容 (4) 1、总体设计 (4) 1.1主控选择模块 (4) 1.2加密模块 (4) 1.3解密模块 (4) 2、流程图 (5) 三模块详细说明 (6) 四、测试数据及其结果 (7) 五、课程设计总结 (8) 六、附录 (9) 附录1:参考文献 (9) 附录2:程序源代码 (9)

一、程序设计目的和要求 1、目的:为保证个人数据资料不被他人窃取使用,保护个人隐私及个人文件。设计一个基于c语言的文本文件加密及解密软件,可以方便对文本文件的加密与解密。本设计实现了文本文件的解密及解密,运行软件之后只需输入任意一个文本文件的文件名及后缀名即可对该文本文件进行加密或解密操作。本设计的加密与解密系统,使用了面向各类文件的方法,运用Microsoft Visual C++ 6.0实现具有加密、解密、帮助信息、读取文本文件、显示结果、退出等功能的文件加密与解密系统。 2、要求: (1)从键盘输入要进行加密的一行字符串或者需要加密的文件名。 (2)显示菜单: (3)选择菜单,进行相应的操作。加密方法是设置一加密字符串以及对文件的哪些部分进行加密;加密是将原始文件加密并保存到文件中;解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性; 3、其他要求 (1)变量、函数命名符合规范。 (2)注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。

信息安全加密实验报告

重庆交通大学实验报告 班级:计信专业2012级2班 学号: 631206060232 姓名:娄丽梅 实验项目名称:DES加解密程序设计与实现 实验项目性质:设计性(验证性) 实验所属课程:信息安全 实验室(中心):软件实验室 指导教师:米波 实验完成时间: 2014 年12月11日

一、实验目的 1、理解DES加密与解密的程序设计算法思想。 2、编写DES加密与解密程序,实现对明文的加密与解密,加深对数据加密与解密的理解,掌握DES加密算法思想,提高网络安全的编程能力。 二、实验主要内容及原理 (一)实验内容 1、掌握DES算法; 2、编写DES算法。 (二)实验原理 1、初始置换 初始置换在第一轮运算之前执行,对输入分组实施如下表所示的变换。此表应从左向右、从上向下读。在将这64位数据分为左右两部分,每部分分别为32位,将左32位留下,将右32位按照下表进行排列 2、密钥置换 一开始,由于不考虑每个字节的第8位,DES的密钥由64位减至56位。每个字节第8位可作为奇偶校验位以确保密钥不发生错误。接着,56位密钥被分成两部分,每部分28位。然后,根据轮数,这两部分分别循环左移l位或2位。在DES的每一轮中,从56位密钥选出48位子密钥(Sub Key)。 3、S盒置换 当产生了48位密钥后就可以和右边32位明文进行异或运算了,得到48位的密文。 再经过下论的S盒跌带,其功能是把6bit数据变为4bit数据,每个S盒是一个4行、16列的表。盒中的每一项都是一个4位的数。S盒的6个位输入确定了其对应的输出在哪一行哪一列。 4、P盒置换 S盒代替运算后的32位输出依照P盒进行置换。该置换把每输入位映射到输出位,任意一位不能被映射两次,也不能被略去,这个置换叫做直接置换。 5、再次异或运算 最后,将P盒置换的结果与最初的64位分组的左半部分异或,然后左、右半部分交换,接着开始另一轮。 6、当进行到16轮后,最终进行一次末置换,形成密文

数据加密实验报告

实验报告 课程:计算机保密_ _ 实验名称:数据的加密与解密_ _ 院系(部):计科院_ _ 专业班级:计科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.wendangku.net/doc/8f7472869.html,/downloads/installer/下载(MySQL):Windows (x86, 32-bit), MSI Installer 5.6.11、1.5M;MD5码: 20f788b009a7af437ff4abce8fb3a7d1),使用MD5Verify工具对刚下载的软件生成信息摘要,并与原来的MD5码比较以确定所下载软件的完整性。或用两款不同的MD5软件对同一文件提取信息摘要,而后比较是否一致,由此可进行文件的完整性认证。

AES加密解密实验报告

信息安全工程课程 实验报告 AES加密解密的实现 课程名称:信息安全工程 学生姓名:黄小菲 学生学号: 3112041006 专业班级:系统工程2038班 任课教师:蔡忠闽 2012年11月22日

目录 1.背景 (1) 1.1 Rijndael密码的设计标准: (1) 1.2 设计思想 (1) 2.系统设计 (2) 2.1系统主要目标 (2) 2.2功能模块与系统结构 (2) 2.2.1字节替换SubByte (2) 2.2.2行移位ShiftRow (2) 2.2.3 列混合MixColumn (3) 2.2.4 轮密钥加AddRoundKey (4) 2.2.5 逆字节替换 (4) 2.2.6逆行移位InvShiftRow (4) 2.2.7 逆列混淆 (4) 3 加密模式 (5) 3.1 电子密码本ECB模式 (5) 3.2加密块链模式CBC模式 (6) 4 系统功能程序设计 (8) 4.1基本加密部分 (8) 4.1.1字节替换 (8) 4.1.2行移位 (8) 4.1.3列混合 (9) 4.1.4轮密钥加 (9) 4.1.5密钥扩展 (10) 4.1.6逆字节替换 (11) 4.1.7逆行移位 (11) 4.1.8逆列混合 (12) 4.1.9加密 (12) 4.1.10解密 (13) 5 实验结果 (14) 5.1 需要加密文件 (14) 5.2 实验加密解密结果 (15) 6 参考资料 (16)

1.背景 AES,密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。AES 有一个固定的128位的块大小和128,192或256位大小的密钥大小。Rijndael算法汇聚了安全性、效率高、易实现性和灵活性等优点,是一种较DES更好的算法。 该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。(Rijdael的发音近于"Rhine doll"。)AES在软体及硬件上都能快速地加解密,相对来说较易于实作,且只需要很少的记忆体。作为一个新的加密标准,目前正被部署应用到更广大的范围. 1.1 Rijndael密码的设计标准: ①抵抗所有已知的攻击。 ②在多个平台上速度快,编码紧凑。 ③设计简单。 当前的大多数分组密码,其轮函数是Feistel结构。 Rijndael没有这种结构。 Rijndael轮函数是由3个不同的可逆均匀变换 1.2 设计思想 ?分组和密钥长度可变,各自可独立指定为128、192、256比特。 ?状态 ?算法中间的结果也需要分组,称之为状态,状态可以用以字节为元素的矩阵 阵列表示,该阵列有4行,列数N b为分组长度除32 ?种子密钥 ?以字节为元素的矩阵阵列描述,阵列为4行,列数N k为密钥长度除32

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

第九章、实验报告 实验一、设置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加密文件,进行暴力破解,获得密码。结果如图:

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所示:

DES加密与解密C实现+实验报告

DES加密与解密算法 课程名称:工程实践 学生姓名: xxxx 学生学号: xxxx 专业班级: xxxx 任课教师: xxxx 论文提交日期: xxxx

DES加密与解密算法 摘要 本世纪五十年代以来,密码学研究领域出现了最具代表性的两大成就。其中之一就是1971年美国学者塔奇曼(Tuchman)和麦耶(Meyer)根据信息论创始人香农(Shannon)提出的“多重加密有效性理论”创立的,后于1977年由美国国家标准局颁布的数据加密标准。 DES密码实际上是Lucifer密码的进一步发展。它是一种采用传统加密方法的区组密码。它的算法是对称的,既可用于加密又可用于解密。 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES枣Data Encryption Standard)。 目前在这里,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。 关键词:DES算法,加密,解密

Abstract This century since fifty time, cryptography research field is the most representative of the two Achievement. One was the 1971 USA scholar Tuchman (Tuchman) and Meyer (Meyer) based on information theory founder Shannon (Shannon) proposed "multiple encryption effectiveness theory" was founded, in 1977 after the National Bureau of standards promulgated by the America data encryption standard.The DES password is actually a further development of the Lucifer password. It is a traditional encryption method of block cipher. The algorithm is symmetric, which can be used for encryption and decryption can be used. In 1977 January, the government promulgated American: adopted IBM design as a non official data confidential data encryption standard (DES - Data Encryption Standard). At present here, along with three gold project especially golden card project startup, DES algorithm in POS, ATM, magnetic card and intelligent card (IC card), gas station, highway toll station and other fields are widely used, so as to realize the security of key data encryption transmission, such as credit card holders PIN, IC card and POS mutual authentication, financial transaction data package of MAC check and so on, are used in DES algorithm. Keywords: DES algorithm, encryption, decryption

古典加密实验报告

古典密码算法 一、实验目的 学习常见的古典密码学算法,通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。 二、实验要求 分析替代密码算法和置换密码算法的功能需求,详细设计实现替代密码算法和置换密码算法的数据结构和流程,给出测试用例和测试步骤,得出测试和结论。替代密码算法和置换密码算法的实现程序必须提供加密和解密两个接口:int encrypt()和int decrypt()。当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR。 三、实验原理 古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种算法:替代密码和置换密码。 1.替代密码的原理是使用替代法进行加密,就是将明文由其它的字母、数字或符合所代替后形成密文。这里每个明文字母对应的密文字母可能是一个,也可能是多个。接收者对密文进行逆向替换即可得到明文。 2.置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。置换密码有时又称为换位密码。 我实验过程中替代密码是单表替换,用字母的下一个字母代替:for(j = 0; j < i; j++)

{ if(96 < Mingwen[j]&&Mingwen[j] < 123) { Miwen[j] = 'a' + (Mingwen[j] - 'a' + 1) % 26; } else { Miwen[j] = 'A' + (Mingwen[j] - 'A' + 1) % 26; } } 置换加密主要是对密钥进行整理,还有就是动态分配二维数组,将明文和密文填充置的过程,换密码关键代码如下: for(a = 0; a < k; a++) { for(b = 0; b < hang; b++) { Miwen[i] = p[b][ord[j]]; i++; } j++; } for(a = 0; a < 26; a++) { for(b = 0; b < k; b++) { if(key1[b] == alphatable[a]) { ord[b] = ind++; } } } 具体加密见下图:

加密解密程序实验报告

程序设计实践 加密解密程序实验报告 课题概述 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主要的层次逻辑为:

凯撒加密解密实验报告

《C语言课程设计》任务书 所属学期:10-11-2 下达时间:2011年8月28日 完成班级: D软件101 【设计目的】 本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《C语言程序设计》课程后进行的一次全面的综合练习。本课程设计的目的和任务:(1)巩固和加深学生对C语言的基本知识的理解和掌握;(2)掌握C语言编程和程序调试的基本技能;(3)利用C语言进行简单软件设计的基本思路和方法;(4)提高运用C语言解决实际问题的能力;(5)掌握书写程序设计说明文档的能力。 【设计内容与任务】 每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。 1、以本班同学的具体数据为背景,设计一个本班同学通讯录。 实现功能: 1) 通讯录编辑(添加、删除)。 2) 按不同的项进行查找。 3) 对已存在的通讯录按不同的项排序。 4) 将通讯录写入文件 5) 从文件读入通讯录 备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail,QQ。 2、设计一个学生成绩排名系统,该系统的主要功能如下: 1) 具备对成绩的管理功能(添加、删除、排序) 2) 具备对成绩的统计功能(最高分,最低分,平均分,及格率等) 3) 具备按学号、姓名、或课程名查询成绩的功能。 备注:成绩记录以下信息:班级,学号,姓名,课程名,成绩(百分制)。可以用能表示学生成绩的结构体数组存储数据。 3、设计一个文件加密/解密程序,主要功能是支持简单的替换加密/解密,支持凯撒加密法(参见百度百科词条:凯撒加密法https://www.wendangku.net/doc/8f7472869.html,/view/4107346.htm)和ROT13加密两种加密方法。 4、设计一个简单的文件压缩/解压缩程序,例如:未压缩前的字符为"aaaccccddddd666666",则压缩以后的字符为:"3a4c5d66"。压缩文件时需要输出压缩比,如20%。 5、设计一个万年历程序。主要功能是能够输出任意年份或月份的日历,程序的输出的月

文件的移位加密解密实验报告

文件的移位加密与解密 一目的 将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥(用户从键盘输入)将对应字符进行移位操作即可,解密时移动相反,使文件恢复原来的字母。 二需求分析 将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥(用户从键盘输入)将对应字符进行移位操作即可,解密时移动相反。 加密:用户选择功能(运行后键盘输入1进行选择),从键盘输入一个任意整数密钥,然后对已知文件“abc.txt”进行加密。加密后屏幕显示加密后文件内容并且文件内容改变。成为加密文件。 解密:通过选择功能(运行后键盘输入2进行选择)对加密后的文件进行解密,输入密钥后能显示出解密后文件内容并且文件变为解密的文件。 通过加密解密可以在文件内容与乱码之间来回转换,使文件内容更安全。 在D盘中建立abc.txt文件并在其中输入字符串abcdef,运行程序,选择1对文件进行加密,输入密钥1,文件abc.txt会变为bcdefg。 三概要设计 本程序有一个模块: main() { 定义整数选择,密钥; 定义字符型数组保存源文件的内容,保存改变后文件的内容;

定义i=0,用来初始化数组; 定义文件指针1,2 第一个只读打开文件,第二个只写打开文件把更改后的文件放入已知文件中。 没有其他函数。 } 四详细设计 主程序流程图 定义最大数组,以及所使用的函数的头文件名

#include #define M 200 #include 文件指针,以及全局变量 int password,choose; char c,yuan[M]; int i=0; FILE *fp,*fp1; 对文件的打开,并对所需功能进行选择。 fp=fopen("D:\\abc.txt","r"); if(fp==NULL) printf("the document can't be open!\n"); printf("please choose the function\n"); printf("1:encrypt 2:decript \n"); scanf("%d",&choose); if(choose!=1&&choose!=2) printf("please input a right number!\n"); system("pause"); 对文件进行加密或者解密处理,并把处理结果输出在屏幕上。while((c=fgetc(fp))!=EOF)

DES文件加密实验报告

DES文件加密实验报告 一、DES算法简介 DES是Data Encryption Standard(数据加密标准)的缩写。它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准,二十年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。 DES是一个分组加密算法,他以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密匙长度是56位(因为每个第8 位都用作奇偶校验),密匙可以是任意的56位的数,而且可以任意时候改变。其中有极少量的数被认为是弱密匙,但是很容易避开他们。所以保密性依赖于密钥。 二、用C#实现DES文件加密 指定文件,输入密钥来加密和解密数据。DESCryptoServiceProvider基于对称加密算法。Symmetricencryption 需要一个密钥和一个初始化向量(IV) 加密请。要解密的数据,必须具有相同的密钥和IV。使用的加密提供程序来获取encryptingobject (CreateEncryptor) 创建CryptoStream类的一个实例,现有输出文件流对象的构造函数的一部分。 要解密文件,执行以下步骤:创建一个方法,并命名该按钮DecryptFile.解密过程是类似于theencryption 进程,但是,DecryptFile过程从EncryptFile过程的两个主要区别。而不是CreateEncryptor使用CreateDecryptor来创建CryptoStream对象,用于指定如何使用该对象。解密的文本写入目标文件,CryptoStream对象是现在而不是目标流的来源。 三、运行环境 可将DES文件加解密软件的可执行.exe文件直接在xp,win7等系统上运行。 四、实验结果 1、开始界面 2、打开要加密文件、输入密钥

AES——密码学实验报告

实验报告 【实验名称】AES加密解密实验 姓名:学号:班级:日期:10月20日 【实验目的】 1.掌握AES算法的基本原理 2.了解AES算法的详细步骤 【实验环境】 1.本试验需要密码教学实验系统的支持 2.操作系统为Windows 2000或者Windows XP 【实验内容】 1.掌握AES算法的原理及过程 2.完成AES密钥扩展运算 3.完成AES数据加密运算 【实验步骤】 1.打开“AES理论学习”,掌握DES算法的加解密原理; 2.打开“AES算法流程”,开始DES单步加密实验,如图10-1; 3.选择密钥输入为ASCII码或十六进制码模式,输入密钥;若为ASCII码模式,则输入 8个字符的ASCII码;若为十六进制码模式,则输入16个字符的十六进制码(0~9,a~f,A~F); 4.点击“字节矩阵”按钮,将输入的密钥转化为密钥字节矩阵,从左至右每一列依次 为W0, W1, W2, W3; 5.依次点击“RotWord”、“SubWord”、“轮常量异或”,对W3依次进行“循环移 位”、“S盒”、“轮常量异或”操作并与W0异或得到W4,; 6.点击“异或”按钮,使得W1与W4进行异或得到W5 7.点击“生成W6和W7”按钮,生成W6和W7 8.点击“生成所有轮密钥”按钮,生成1~10轮轮密钥

9.进入第二部分——加密,选择加密输入为ASCII码或十六进制码模式,输入明文;若 为ASCII码模式,则输入8个字符的ASCII码;若为十六进制码模式,则输入16个字符的十六进制码(0~9,a~f,A~F); 10.点击“字节矩阵”按钮,将输入明文转化为明文字节矩阵; 11.点击“AddRoundKey”按钮,使明文字节矩阵与密文字节矩阵进行逐比特异或; 12.接下来进行第一轮操作,依次点击“SubBytes”、“ShiftRows”、“MixColumns”、

数据加密实验报告

加密与隐藏实验报告 姓名王珊学号 09040436011 专业计算机系信管专业班级09级 实验项目名称数据的加密与隐藏 指导教师及职称赵欣 开课学期 2011 至 2012 学年 1 学期上课时间 2011 年 9 月 1 日 实验项目:数据的加密与隐藏

一、实验环境 Pentiuum III、600 MHz以上CPU , 128M 以上内存,10G 以上硬盘,安装windows 98 以上操作系统,加密与隐藏软件EsayCode Boy Plus 。EasyCode Boy Plus ,界面如图1-1所示。 图1-1 EasyCode Boy Plus界面 二、实验目的及要求 一、实验目的 (1)提高对加密与解密原理的认识; (2)提高对信息隐藏原理的认识; (3)学会使用加密与隐藏软件。 要求: 1.熟悉实验环境,掌握相关数据加密解密的使用方法; 2.掌握数据隐藏和恢复的方法; 3.整理出思路清晰的实验报告并加以总结; 4.提交实验报告。 三、实验仪器设备 Windows2000/XP +ECBoy文件加密器 四、实验内容及步骤 4.1 加密文件 任意编写一个 Word 文档,如 my.doc,如下图所示

→选中要加密的文件(如 my. doc )→在密码输人框中输人密码→“开始加密”如图 打开加密文件,如 my.doc ,看到的将是乱码如下

说明:实际上EasyCode Boy Plus可以加密任何类型的文件,并对文件的每个比特单元加密。如果需要加密一个文件夹,可以单击“批量添加文件”,程序将加密文件夹中的所有文件;如果被加密的文件较大,可以选中“启动快速加密”选项;如果只对文件名加密,可以选中“加密文件名”选项,这时加密后的文件名会改变,无法打开或执行。 4.2 解密文件 在 Esaycode Boy Plus 窗口→选中“解密”→选择被加密的文件→在密码输人框中输人密码→“开始解密”→打开解密的文件,如 my.doc,可以看到文件的内容已经被解密或 文件已经可以运行。

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加密解密算法的用C++实现,附上实验报告

网络与信息安全Introduction to Network and Security ——DES 加密解密算法的C++实现 姓名: 学号: 学院: 2010年10月

一、DES算法的实现 1.DES简介 本世纪五十年代以来,密码学研究领域出现了最具代表性的两大成就。其中之一就是1971年美国学者塔奇曼(Tuchman)和麦耶(Meyer)根据信息论创始人香农(Shannon)提出的“多重加密有效性理论”创立的,后于1977年由美国国家标准局颁布的数据加密标准。 DES密码实际上是Lucifer密码的进一步发展。它是一种采用传统加密方法的区组密码。它的算法是对称的,既可用于加密又可用于解密。 美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。加密算法要达到的目的通常称为DES密码算法要求主要为以下四点: 提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改;具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础实现经济,运行有效,并且适用于多种完全不同的应用。 1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES枣Data Encryption Standard)。 目前在这里,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC 校验等,均用到DES算法。 DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES 的工作方式,有两种:加密或解密。 DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。 通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。 2.DES算法详述 DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其功能是把输入的64位数据块按位重新组合,并把输出分为L0 、R0两部分,每部分各长32位,其置换规则见下表: 58,50,12,34,26,18,10,2,60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,

实验二 使用PGP进行加解密实验报告

“使用PGP进行加解密”实验报告 班级: 姓名: 实验日期: 实验时间:至 实验地点:院楼435 华南农业大学信息学院

一.实验目的 通过使用PGP软件对文件进行加密和解密,加深对加密和解密技术的认识。二.实验内容 1合作双方分别在自己机器上的PGP软件中生成密钥对。 2双方分别导出自己的公钥并传给对方(可通过磁盘拷贝,网络拷贝或电子邮件传输)。 3双方分别将对方传来的公钥导入到自己的PGP软件中,并对此公钥进行签名确认信任此公钥。 4 双方分别加密一个文件。用记事本程序打开加密后的文件,观察文件的内容。 5双方分别将加密后的文件传给对方。 6双方分别用PGP软件解密收到的加密文件。 三.实验设备(2人一组) PC机两台,安装有以下软件: 1 Windows 2000 Professional操作系统 2 PGP软件 四. 实验记录 记录实验的每一步操作过程,配置参数,实验结果,操作过程中出现的问题及及解决方法。 (一)生成新的密钥对 (1)点击“开始”-> “程序”->“PGP”->“PGPKeys” (2)在弹出的窗口的菜单栏中,选择“keys”->“New Key…” (3)在弹出的PGP Key Generation Wizard(PGP密钥生成向导)窗口中,点“下一步”按钮,进入Name and Email Assignment(用户名和电子邮件分配)界面,在Full name处输入用户名,Email address处输入用户所对应的电子邮件地址,完成后点“下一步”按钮。 (4)在Passphrase Assignment(密码设定)界面,在Passphrase处输入你需要的密码,Confirmation(确认)处再输入一次,密码长度必须大于8位。完成后点“下一步”按钮。进入Key Generation Progress(密钥生成进程),等待主密钥(Key)和次密钥(Subkey)生成完毕(出现Done)。点击“下一步”按钮,进入Completing the PGP Key Generation Wizard (完成该PGP密钥生成向导)再点“完成”按钮,你的密钥对就创建好了。

加解密算法实验报告

实验加/解密算法 实验日期:__年__月_日实验成绩:___________ 1.实验目的: (1)数据机密性; (2)数据完整性; (3)不可抵赖性 2.实验环境(设备、仪器、网络): (1)虚拟机 (2)加密工具 (3)Windows系统环境 3.实验内容(实验方案、实验步骤、测量数据及处理等): 3.1实验方案 加密方和解密方利用RSA加密算法分别生成一对公钥和私钥,并告知对方自己的公钥。 加密方实验流程如图3-1所示: 图3-1 将加密后的明文和签名发送给解密方。 解密方实验流程如图3-2所示:

图3-2 将明文同样进行hash运算得出摘要,与验证签名后得出的摘要相比较,如果相同则可以证明明文没有被破坏或改变,同时也可使确定是加密方发送的信息。 3.2实验过程 加密方 (1)加密方通过RSA算法得出公钥(e,n)=(101,253),私钥(d,n)=(61,253); (2)编辑明文为we are in xinjiang,and you? (3)在加密工具的环境中利用解密方的公钥对明文进行加密,如图3-3所示: 图3-3 (4)在加密工具中利用MD5对明文进行hash运算,如图3-4所示:

图3-4 (5)用加密方的私钥对生成的摘要进行签名,如图3-5所示: 图3-5 (6)将签名与密文发送给解密方。

解密方 (1)通过RSA算法得出公钥(e,n)=(1003,2173),私钥(d,n)=(1827,2173) (2)利用解密方的私钥对密文解密,如图3-6所示: 图3-6 (3)验证签名,将加密方发送的签名用加密方的公钥解密,如图3-7所示:

实验三 DES加解密程序设计与实现

实验三DES加解密程序设计与实现 一、实验目的 ?理解DES加密与解密的程序设计算法思想。 ?编写DES加密与解密程序,实现对明文的加密与解密,加深对数据加密 与解密的理解,掌握DES加密算法思想,提高网络安全的编程能力。 二、实验时数:4小时 三、实验环境 ?Windows操作系统、TC、VC、Java等编程软件。 四、实验要求 ?了解DES算法的优缺点及应用场合; ?理解并掌握DES算法的原理; ?编写DES加解密算法程序; ?程序关键语句后应加注释; 五、实验内容及步骤 1)实验内容 ?掌握DES算法; ?编写DES算法。 2)实验步骤 利用编程语言实现DES加解密算法。 一、编程:包含的功能函数有: static void DES(char Out[8], char In[8], const SUBKEY_P pskey, bool Type);//标准DES 加/解密 static void SETKEY(const char* Key, int len);// 设置密钥 static void Set_SubKey(SUBKEY_P pskey, const char Key[8]);// 设置子密钥static void F_FUNCTION(bool In[32], const bool Ki[48]);// f 函数完成扩展置换、S-盒代替和P 盒置换 static void S_BOXF(bool Out[32], const bool In[48]);// S-盒代替函数 static void TRANSFORM(bool *Out, bool *In, const char *Table, int len);// 变换函数 static void XOR(bool *InA, const bool *InB, int len);//异或函数 static void CYCLELEFT(bool *In, int len, int loop);// 循环左移函数 static void ByteToBit(bool *Out, const char *In, int bits);// 字节组转换成位组函数 static void BitToByte(char *Out, const bool *In, int bits);// 位组转换成字节组函数 二、调试 三、运行结果

相关文档
相关文档 最新文档