资源简介
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 对三角形 的 角度检测
相关资源
- AES s盒生成代码
- AES加密解密系统 VC++6.0 实现
- AES密码算法C语言实现
- C语言 stm32 AES加密解密
- C++文件加密系统
- md5加密算法 C语言经过测试验证完整版
- ECC加密 RSA加密 C++ 简单实现 不带大数
- AES单片机加密解密 C语言源代码
- Wolfe Powell 最优化方法 C++ 程序
- aes算法实现C++)
- vigenere密码加密解密算法实现软件Vc
- rc4加密解密算法
- AES任意文件长度加解密C语言实现
- aes加密算法matlab
- AES128 C语言实现源码及应用例程
- CBC模式的DES加密解密程序
- 水库优化调度程序源代码
- 多目标车辆路径优化源代码
- 仿射加密现代密码学
- 数据结构课程设计公交线路优化查询
- vc++文件加密程序软件
- C语言编程之运行速度优化方法汇总
- c语言rc4加密算法调试通过
- C语言实现的文字加密与解密小程序(
- 国密SM4加密解密51单片机版C源程序.
- C++ Qt5实现RSA加解密
- C语言实现的DES加密算法
- 基于二叉堆优化的A星算法
- WOA鲸鱼优化算法 C++实现
- vigenere加密解密C语言代码
评论
共有 条评论