资源简介
AES加密与解密算法的优化
可用于文件加密
c++实现
含pdf文件说明优化的过程

代码片段和文件信息
// AES.cpp: implementation of the AES class.
//
//////////////////////////////////////////////////////////////////////
#include “AES.h“
#include
using namespace std;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
AES::AES()
{
}
AES::~AES()
{
}
void AES::keyExpansion(unsigned char *key)
{//密钥扩展
unsigned long RCon[]= {0x010000000x020000000x04000000
0x080000000x100000000x200000000x40000000
0x800000000x1b0000000x36000000};
unsigned long w[44]={0}temp;
int ij;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
temp=(unsigned char)key[4*i+j];
w[i]=w[i]|(temp<<(24-8*j));//用4个字符组成一个32位的数据
}
}
for(i=4;i<44;i++){
temp=w[i-1];
if(i%4==0){
temp=subWord(rotWord(temp))^RCon[i/4-1];
}
w[i]=w[i-4]^temp;
}
for(i=0;i<16;i++) W[0][i]=key[i];
for(i=0;i<40;i++){
for(j=0;j<4;j++){
W[i/4+1][i%4*4+j]=(w[i+4]>>(24-8*j))&0xff;
}
}
}
void AES::setKey(unsigned char *keyint len)
{
int i;
K=len/4;
R=K+6;//得到轮数
//NB=K*(R+1);//轮密钥总长度;
W=new unsigned char*[R+1];
for(i=0;i W[i]=new unsigned char[len];
keyExpansion(key);
}
unsigned long AES::rotWord(unsigned long temp)//32位数据 循环移位
{
unsigned long t=temp>>24&0xff;//
temp=(temp<<8)|t;
return temp;
}
unsigned long AES::subWord(unsigned long temp)
{
unsigned long t;
unsigned long ts[]={0x00ffffff0xff00ffff0xffff00ff0xffffff00};
int move;
for(int i=0;i<4;i++){
move=(3-i)*8;
t=temp>>move&0xff;
t=S_01[t]< temp=temp&ts[i]|t;
}
return temp;
}
void AES::show()
{//输出状态矩阵
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
printf(“%x “state[j][i]&0xff);
cout< }
void AES::encode(unsigned char *plaintext unsigned char *ciphertest)
{
int ijk;
unsigned char t[4][4];
unsigned char tmp[3];
for(i=0;i<4;i++)//
for(j=0;j<4;j++)
state[i][j]=plaintext[4*j+i]^W[0][j*4+i];//第一次轮密钥异或
for(k=1;k for(i=0;i<4;i++)
for(j=0;j<4;j++)
t[i][j]=state[i][j];
for(i=0;i<4;i++){//S_XX表为域元素先作S盒变换再与XX作域元素的乘法 下面的算法还将循环移位加在了里面
state[0][i]=S_02[t[0][ i ]]^S_03[t[1][(i+1)%4]]^S_01[t[2][(i+2)%4]]^S_01[t[3][(i+3)%4]];
state[1][i]=S_02[t[1][(i+1)%4]]^S_03[t[2][(i+2)%4]]^S_01[t[3][(i+3)%4]]^S_01[t[0][ i ]];
state[2][i]=S_02[t[2][(i+2)%4]]^S_03[t[3][(i+3)%4]]^S_01[t[0][ i ]]^S_01[t[1][(i+1)%4]];
state[3][i]=S_02[t[3][(i+3)%4]]^S_03[t[0][ i ]]^S_01[t[1][(i+1)%4]]^S_01[t[2][(i+2)%4]];
}
for(i=0;i<4;i++)//第k次加轮密钥
for(j=0;j<4;j++)
state[i][j]=state[i][j]^W[k][j*4+i];
}
//要盒代换与循环移位可以互换
for(i=0;i<4;i++)
for(j=0;j<4;j++)//最后一次S盒代换
state[i][j]=S_01[state[i][j]];
for(i=1;i<4;i++){//循环移位
memcpy(tmpstate[i]i);
memcpy(state[i]state[i]+i4-i);
memcpy(state[i]+4-itmpi);
}
for(i=0;i<4;i++)//最后一次加轮密钥
for(j=0;j<4;j++)
ciphertest[j*4+i]=state[i][j]^
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 120412 2010-04-20 19:27 优化2AES\lunwen.pdf
文件 49664 2010-05-01 18:56 优化2AES\AES.opt
文件 1443 2010-05-01 18:56 优化2AES\AES.plg
文件 123904 2010-05-01 18:56 优化2AES\AES.ncb
文件 4567 2010-05-01 18:39 优化2AES\AES.cpp
文件 4465 2010-05-01 18:42 优化2AES\util.h
文件 514 2001-01-01 01:37 优化2AES\AES.dsw
文件 14559 2010-05-01 18:48 优化2AES\AES.h
文件 654 2010-05-01 18:56 优化2AES\text.cpp
文件 1098 2010-05-01 18:56 优化2AES\FileEncodeAndDecode.h
文件 4409 2010-05-01 18:56 优化2AES\FileEncodeAndDecode.cpp
文件 359 2010-04-21 18:36 优化2AES\ES.cpp
文件 668 2010-04-21 18:36 优化2AES\ES.h
文件 4686 2010-04-21 18:37 优化2AES\AES.dsp
目录 0 2010-04-22 09:53 优化2AES\Debug
目录 0 2010-04-22 09:53 优化2AES
----------- --------- ---------- ----- ----
331402 16
- 上一篇:家谱管理系统 VC
- 下一篇:基于 OPENCV 对三角形 的 角度检测
相关资源
- 3des加密算法C语言实现
- DES加密算法C语言实现
- C语言实现的DES对称加密算法
- 国密SM4加密_2020
- aes加解密(vc源程序)
- C++ SHA256加密计算
- BlowFish加密算法
-
STM32-ba
se64加密源代码 - 烟花优化算法(c语言版)
- VProtect+注册机.rar
- VC++实现RSA加密算法
- dsp课程设计——语音加密.zip
- C++实现RSA加密解密算法
- AES-128-CBC算法C语言源码已经修改,可
- 多表代换 加密解密 C语言实现
- 椭圆曲线ECC加密解密算法的c语言实现
- hill密码的加密、解密以及破译.zip
- C++实现AES、DES加密算法含MFC界面
- 3DES加密算法C++实现
- DES/3DES算法C语言实现
- DES和3DES加密算法,C语言,适用于单片
- 各种加密算法C语言版
-
C++_AES_ECB_ba
se64 - SM4(ECB、CBC、CTR、CFB、OFB)加密算法
- AES算法采用verilog硬件实现
- RSA算法纯C语言代码实现,带测试dem
- sm2算法源码实现
- 现代优化设计黄金分割法和二次插值
- AES GCM算法源码
- DES算法C++实现.rar
评论
共有 条评论