整理的几种AES加解密算法C源程序Word文件下载.doc
- 文档编号:13169138
- 上传时间:2022-10-07
- 格式:DOC
- 页数:38
- 大小:298.50KB
整理的几种AES加解密算法C源程序Word文件下载.doc
《整理的几种AES加解密算法C源程序Word文件下载.doc》由会员分享,可在线阅读,更多相关《整理的几种AES加解密算法C源程序Word文件下载.doc(38页珍藏版)》请在冰豆网上搜索。
classAES
{
public:
typedefunsignedcharbyte;
staticconstintKEY_SIZE=16;
//密钥长度为位
staticconstintN_ROUND=11;
byteplainText[16];
//明文
bytestate[16];
//当前分组。
bytecipherKey[16];
//密钥
byteroundKey[N_ROUND][16];
//轮密钥
bytecipherText[16];
//密文
byteSBox[16][16];
//S盒
byteInvSBox[16][16];
//逆S盒
voidEncryptionProcess();
voidDecryptionProcess();
voidRound(constint&
round);
voidInvRound(constint&
voidFinalRound();
voidInvFinalRound();
voidKeyExpansion();
voidAddRoundKey(constint&
voidSubBytes();
voidInvSubBytes();
voidShiftRows();
voidInvShiftRows();
voidMixColumns();
voidInvMixColumns();
voidBuildSBox();
voidBuildInvSBox();
voidInitialState(constbyte*text);
voidInitialCipherText();
voidInitialplainText();
byteGFMultplyByte(constbyte&
left,constbyte&
right);
constbyte*GFMultplyBytesMatrix(constbyte*left,constbyte*right);
AES();
constbyte*Cipher(constbyte*text,constbyte*key,constint&
keySize);
constbyte*InvCipher(constbyte*text,constbyte*key,constint&
};
voidAES:
:
EncryptionProcess()
{//加密过程
InitialState(plainText);
KeyExpansion();
//密钥扩展
AddRoundKey(0);
//轮密钥加
for(inti=1;
i<
N_ROUND-1;
++i)
{
Round(i);
}
FinalRound();
InitialCipherText();
}
DecryptionProcess()
{//解密过程
InitialState(cipherText);
InvFinalRound();
for(inti=N_ROUND-2;
i>
0;
--i)
InvRound(i);
InitialplainText();
Round(constint&
round)
{//正常轮
SubBytes();
ShiftRows();
MixColumns();
AddRoundKey(round);
InvRound(constint&
{//正常轮的逆
InvMixColumns();
InvShiftRows();
InvSubBytes();
FinalRound()
{//最后轮
AddRoundKey(N_ROUND-1);
InvFinalRound()
{//最后轮的逆
KeyExpansion()
{//密钥扩展
constbytercon[N_ROUND][4]={
{0x00,0x00,0x00,0x00},
{0x01,0x00,0x00,0x00},
{0x02,0x00,0x00,0x00},
{0x04,0x00,0x00,0x00},
{0x08,0x00,0x00,0x00},
{0x10,0x00,0x00,0x00},
{0x20,0x00,0x00,0x00},
{0x40,0x00,0x00,0x00},
{0x80,0x00,0x00,0x00},
{0x1b,0x00,0x00,0x00},
{0x36,0x00,0x00,0x00}};
for(inti=0;
16;
{
roundKey[0][i]=cipherKey[i];
}
4;
{//roundKey[0][16]为cipherKey的转置矩阵
for(intj=0;
j<
++j)
{
roundKey[0][4*i+j]=cipherKey[4*j+i];
}
for(introundIndex=1;
roundIndex<
N_ROUND;
++roundIndex)
byterotWord[4]={0x00};
rotWord[0]=roundKey[roundIndex-1][3];
rotWord[1]=roundKey[roundIndex-1][7];
rotWord[2]=roundKey[roundIndex-1][11];
rotWord[3]=roundKey[roundIndex-1][15];
std:
swap<
byte>
(rotWord[0],rotWord[1]);
(rotWord[1],rotWord[2]);
(rotWord[2],rotWord[3]);
for(inti=0;
rotWord[i]=SBox[rotWord[i]>
>
4][rotWord[i]&
0x0f];
roundKey[roundIndex][4*i]=roundKey[roundIndex-1][4*i]^rotWord[i]^rcon[roundIndex][i];
for(intj=1;
for(inti=0;
{
roundKey[roundIndex][4*i+j]=roundKey[roundIndex-1][4*i+j]^roundKey[roundIndex][4*i+j-1];
}
AddRoundKey(constint&
{//轮密钥加
for(inti=0;
{//利用当前分组state和第round组扩展密钥进行按位异或
state[i]^=roundKey[round][i];
SubBytes()
{//字节代换
{
state[i]=SBox[state[i]>
4][state[i]&
InvSubBytes()
{//逆字节代换
state[i]=In
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整理 AES 解密 算法 源程序