AES加密算法实验报告Word文件下载.docx

上传人:b****1 文档编号:15335194 上传时间:2022-10-29 格式:DOCX 页数:17 大小:1.39MB
下载 相关 举报
AES加密算法实验报告Word文件下载.docx_第1页
第1页 / 共17页
AES加密算法实验报告Word文件下载.docx_第2页
第2页 / 共17页
AES加密算法实验报告Word文件下载.docx_第3页
第3页 / 共17页
AES加密算法实验报告Word文件下载.docx_第4页
第4页 / 共17页
AES加密算法实验报告Word文件下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

AES加密算法实验报告Word文件下载.docx

《AES加密算法实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《AES加密算法实验报告Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。

AES加密算法实验报告Word文件下载.docx

实验环境

PC机,Windows7操作系统,VisualC++6.0

实验内容(算法、程序、步骤和方法)

一、简介

美国国家标准技术研究所在2001年发布了高级加密标准(AES)。

AES是一个对称加密算法,旨在取代DES成为广泛使用的标准。

AES中的所有运算都是在8为的字节上运行的。

特别饿,加减乘除算术都是在有限域GF(28)上运行的。

二、程序特点

本次试验中要求对图片进行加密与解密,并将加密结果以图片格式进行保存。

因此为了实现对图片的调度及保存,使用头文件atlimage.h进行对图片的操作,实现对图片的像素读取,图片的保存。

在程序运行读取需要加密的图片时,需要进行图片的选取,本次实验中使用在弹窗中选取文件的方式,使用头文件commdlg.h来实现在文件夹中选择需要的文件的选取。

三、加密算法流程

AES加密算法流程如下

字节代替:

用一个S盒完成分组的字节到字节的代替;

行移位:

进行一次行上的置换;

列混合:

利用有限域GF(28)上的运算特性的一个代替;

轮密钥加:

当前分组和扩展密钥的一部分进行按位异或。

四、代码实现

cryptograph.h

#include<

string>

iostream>

classplaintext

{

public:

plaintext();

staticvoidcreateplaintext(unsignedchara[]);

staticvoidSubBytes(unsignedcharp[16]);

staticvoidinSubBytes(unsignedcharp[16]);

staticvoidShiftRows(unsignedchare[]);

staticvoidinShiftRows(unsignedchare[]);

staticvoidMatrixToByte(unsignedchare[]);

staticvoidinMatrixToByte(unsignedchare[]);

staticunsignedcharFFmul(unsignedchara,unsignedcharb);

staticvoidKeyAdding(unsignedcharstate[16],unsignedchark[][4]);

staticvoidKeyExpansion(unsignedchar*key,unsignedcharw[][4][4]);

~plaintext();

private:

};

cryptograph.cpp

#include"

cryptography.h"

usingnamespacestd;

staticunsignedcharsBox[]={};

/定义加密S盒/

unsignedcharinsBox[256]={};

//定义解密S盒

plaintext:

:

plaintext()

}

voidplaintext:

createplaintext(unsignedchara[])//创建明文

inti=0;

unsignedintp[16];

for(intj=0;

j<

200;

j++)

{

if(a[j]==0)

{

break;

}

}

for(;

i<

16;

i++)

p[i]=a[i];

a[i]=a[i+16];

SubBytes(unsignedcharp[16])//字节变换函数

unsignedcharb[16];

for(inti=0;

b[i]=sBox[(int)p[i]];

inSubBytes(unsignedcharp[16])//逆字节变换函数

b[i]=insBox[(int)p[i]];

ShiftRows(unsignedchare[])//行移位变换函数

unsignedchart[4];

for(inti=1;

4;

for(intx=0;

x<

x++)

t[x]=e[x+i*4];

for(inty=0;

y<

y++)

e[(y+4-i)%4+i*4]=t[y];

inShiftRows(unsignedchare[])//逆行移位变换函数

e[(y+i)%4+i*4]=t[y];

MatrixToByte(unsignedchare[])//列混合变换函数

intr,c;

for(c=0;

c<

4;

c++)

for(r=0;

r<

r++)

t[r]=e[r*4+c];

e[r*4+c]=FFmul(0x02,t[r])

^FFmul(0x03,t[(r+1)%4])

^FFmul(0x01,t[(r+2)%4])

^FFmul(0x01,t[(r+3)%4]);

inMatrixToByte(unsignedchare[])//逆列混合变换函数

e[r*4+c]=FFmul(0x0e,t[r])

^FFmul(0x0b,t[(r+1)%4])

^FFmul(0x0d,t[(r+2)%4])

^FFmul(0x09,t[(r+3)%4]);

unsignedcharplaintext:

FFmul(unsignedchara,unsignedcharb)

unsignedcharbw[4];

unsignedcharres=0;

inti;

bw[0]=b;

for(i=1;

bw[i]=bw[i-1]<

<

1;

if(bw[i-1]&

0x80)

bw[i]^=0x1b;

for(i=0;

if((a>

>

i)&

0x01)

res^=bw[i];

returnres;

KeyAdding(unsignedcharstate[16],unsignedchark[][4])//轮密钥加

state[r+c*4]^=k[r][c];

KeyExpansion(unsignedchar*key,unsignedcharw[][4][4])//密钥扩展

inti,j,r,c;

unsignedcharrc[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x1b,0x36};

for(r=0;

for(c=0;

w[0][r][c]=key[r+c*4];

i<

=10;

for(j=0;

unsignedchart[4];

for(r=0;

{

t[r]=j?

w[i][r][j-1]:

w[i-1][r][3];

}

if(j==0)

unsignedchartemp=t[0];

for(r=0;

3;

{

t[r]=sBox[t[(r+1)%4]];

}

t[3]=sBox[temp];

t[0]^=rc[i-1];

w[i][r][j]=w[i-1][r][j]^t[r];

~plaintext()

main.cpp

#include<

atlimage.h>

commdlg.h>

//使用文件选取功能

unsignedcharw[11][4][4]={0};

intlen=0;

//图片每行需要加密的长度

voidCipher();

//加密图片

voidinCipher();

//解密图片

voidCipher(unsignedchara[])

(len/16);

for(intj=0;

b[j]=a[j+i*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1