四川大学计算机学院、软件学院实验报告学号:姓名:专业:班级:,实现图片加密与解密,并将加密后的结果以图片格式保存。实验环境PC机,Windows7操作系统,VisualC++(算法、程序、步骤和方法)简介美国国家标准技术研究所在2001年发布了高级加密标准(AES)。AES是一个对称加密算法,旨在取代DES成为广泛使用的标准。AES中的所有运算都是在8为的字节上运行的。特别饿,加减乘除算术都是在有限域GF(28)上运行的。程序特点本次试验中要求对图片进行加密与解密,并将加密结果以图片格式进行保存。因此为了实现对图片的调度及保存,,实现对图片的像素读取,图片的保存。在程序运行读取需要加密的图片时,需要进行图片的选取,本次实验中使用在弹窗中选取文件的方式,。加密算法流程AES加密算法流程如下字节代替:用一个S盒完成分组的字节到字节的代替;行移位:进行一次行上的置换;列混合:利用有限域GF(28)上的运算特性的一个代替;轮密钥加:当前分组和扩展密钥的一部分进行按位异或。#include<string>#include<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:};#include""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]; }}voidplaintext::SubBytes(unsignedcharp[16])//字节变换函数{ unsignedcharb[16]; for(inti=0;i<16;i++) { b[i]=sBox[(int)p[i]]; }}voidplaintext::inSubBytes(unsignedcharp[16])//逆字节变换函数{ unsignedcharb[16]; for(inti=0;i<16;i++) { b[i]=insBox[(int)p[i]]; }}voidplaintext::ShiftRows(unsignedchare[])//行移位变换函数{ unsignedchart[4]; for(inti=1;i<4;i++) { for(intx=0;x<4;x++) t[x]=e[x+i*4]; for(inty=0;y<4;y++) e[(y+4-i)%4+i*4]=t[y]; }}voidplaintext::inShiftRows(unsignedchare[])//逆行移位变换函数{ unsignedchart[4]; for(inti=1;i<4;i++) { for(intx=0;x<4;x++) t[x]=e[x+i*4]; for(i
AES加密算法实验报告材料 来自淘豆网m.daumloan.com转载请标明出处.