亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? aes.cpp

?? AES一種常用的加密解密方法 AES加密解密程序源碼
?? CPP
字號(hào):
#include "StdAfx.h"    //注意在此 #include "Aes.h"不可以放在前面,否則出錯(cuò),
#include "Aes.h"
Aes::~Aes()
{
	
}
Aes::Aes()
{
	
}
////////////////////////////////////////////////////////////////////////////////////////////////
//構(gòu)造函數(shù)
Aes::Aes(int keysize,unsigned char* keyBytes)
{
	SetNbNkNr(keysize);                         //設(shè)置密鑰塊數(shù),輪數(shù) 
	memcpy(key,keyBytes,keysize);				//字符串拷貝函數(shù),把keyBytes的keysize個(gè)字符復(fù)制到key中
	KeyExpansion();								//密鑰擴(kuò)展,必須提前做的初始化
}
////////////////////////////////////////////////////////////////////////////////////////////////
Aes::SetNbNkNr(int keySize)
{
	Nb=4;
	if(keySize=Bits128)
	{
		Nk=4;    //4*4字節(jié),128位密鑰,10輪加密
		Nr=10;
	}
	else if(keySize=Bits192)
	{
		Nk=6;    //6*4字節(jié),192位密鑰,12輪加密
		Nr=12;
	}
	else if(keySize=Bits256)
	{
		Nk=8;    //8*4字節(jié),256位密鑰,14輪加密
		Nr=14;
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////
Aes::KeyExpansion()
{

	memset(w,0,16*15);
	for(int row=0;row<Nk;row++)       //拷貝seed 密鑰
	{
		w[4*row+0] =  key[4*row];
		w[4*row+1] =  key[4*row+1];
		w[4*row+2] =  key[4*row+2];
		w[4*row+3] =  key[4*row+3];
	}
	byte* temp = new byte[4];
	for(row=Nk;row<4*(Nr+1);row++)
	{
		temp[0]=w[4*row-4];     //當(dāng)前列的前一列  
		temp[1]=w[4*row-3];
		temp[2]=w[4*row-2];
		temp[3]=w[4*row-1];
		if(row%Nk==0)           //逢nk時(shí),對(duì)當(dāng)前列的前一列作特殊處理
		{
			temp=SubWord(RotWord(temp));   //先移位,再代換,最后和輪常量異或
			temp[0] = (byte)( (int)temp[0] ^ (int) AesRcon[4*(row/Nk)+0] );   
			temp[1] = (byte)( (int)temp[1] ^ (int) AesRcon[4*(row/Nk)+1] );
			temp[2] = (byte)( (int)temp[2] ^ (int) AesRcon[4*(row/Nk)+2] );
			temp[3] = (byte)( (int)temp[3] ^ (int) AesRcon[4*(row/Nk)+3] );
        }
		else if ( Nk > 6 && (row % Nk == 4) )  //這個(gè)還沒(méi)有搞清楚
        {
			temp = SubWord(temp);
        }
        
        // w[row] = w[row-Nk] xor temp
        w[4*row+0] = (byte) ( (int) w[4*(row-Nk)+0] ^ (int)temp[0] );
		w[4*row+1] = (byte) ( (int) w[4*(row-Nk)+1] ^ (int)temp[1] );
		w[4*row+2] = (byte) ( (int) w[4*(row-Nk)+2] ^ (int)temp[2] );
		w[4*row+3] = (byte) ( (int) w[4*(row-Nk)+3] ^ (int)temp[3] );
	}  // for loop
	
}
////////////////////////////////////////////////////////////////////////////////////////////////
//密鑰移位函數(shù)
unsigned char* Aes::RotWord(unsigned char* word)
{
	byte* temp = new byte[4];
	temp[0] = word[1];
	temp[1] = word[2];
	temp[2] = word[3];
	temp[3] = word[0];
	return temp;
}
////////////////////////////////////////////////////////////////////////////////////////////////
//密鑰字代換函數(shù)
unsigned char* Aes::SubWord(unsigned char* word)
{
	byte* temp = new byte[4];
	for(int j=0;j<4;j++)
	{
		temp[j] = AesSbox[16*(word[j] >> 4)+(word[j] & 0x0f)];  //實(shí)際上也可以寫成AesSbox[[j]];因?yàn)閮烧呦嗟?	}
	return temp;

}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes加密函數(shù)
void Aes::Cipher(unsigned char* input, unsigned char* output)
{
	memset(&State[0][0],0,16);
	for(int i=0;i<4*Nb;i++)                        //這里是先寫列后寫行的,即輸入是一列一列的進(jìn)來(lái)的
	{
		State[i%4][i/4]=input[i];					//換成先寫行后寫列也是可以的,只要在輸出時(shí)也是這樣就可以了
	}
	AddRoundKey(0);									//輪密鑰加
	
	for (int round = 1; round <= (Nr - 1); round++)  // main round loop
	{
        SubBytes();									//字節(jié)代換
        ShiftRows();								//行移位
        MixColumns();								//列混淆
        AddRoundKey(round);							//輪密鑰加
	}  // main round loop
	
	SubBytes();										//字節(jié)代換
	ShiftRows();									//行移位
	AddRoundKey(Nr);								//輪密鑰加
	
	// output = state
	for (i = 0; i < (4 * Nb); i++)
	{
        output[i] =  State[i % 4][ i / 4];
	}

}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes解密函數(shù)
Aes::InvCipher(unsigned char* input,unsigned char* output)
{
	memset(&State[0][0],0,16);
	for (int i = 0; i < (4 * Nb); i++)
	{
		State[i % 4][ i / 4] = input[i];
	}
	
	AddRoundKey(Nr);
	
	for (int round = Nr-1; round >= 1; round--)  // main round loop
	{
        InvShiftRows();
        InvSubBytes();
        AddRoundKey(round);
        InvMixColumns();
	}  // end main round loop for InvCipher
	
	InvShiftRows();
	InvSubBytes();
	AddRoundKey(0);
	
	// output = state
	for (i = 0; i < (4 * Nb); i++)
	{
        output[i] =  State[i % 4][ i / 4];
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////
//輪密鑰加
Aes::AddRoundKey(int round)
{
	int i,j;  //i行 j列           //因?yàn)槊荑€w是一列一列排列的,即 k0 k4 k8 k12
	for(j=0;j<4;j++)			  //							  k1 k5 k9 k13
	{							  //							  k2 k6 k10k14
		for(i=0;i<4;i++)		  //							  k3 k7 k11k15
		{						  // 所以i行j列的下標(biāo)是4*((round*4)+j)+i即16*round+4*j+i
			State[i][j]=(unsigned char)((int)State[i][j]^(int)w[4*((round*4)+j)+i]);  
		}
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////
//字節(jié)代換函數(shù)
Aes::SubBytes()                              //Page 103
{
	int i,j;
	for(j=0;j<4;j++)
	{
		for(i=0;i<4;i++)
		{
			State[i][j]=AesSbox[State[i][j]];
			//因?yàn)?16*(State[i][j]>>4)+State[i][j]&0x0f=State[i][j]


		}
	}
}
Aes::InvSubBytes()
{
	int i,j;
	for(j=0;j<4;j++)
	{
		for(i=0;i<4;i++)
		{
			State[i][j]=AesiSbox[State[i][j]]; //因?yàn)?16*(State[i][j]>>4)+State[i][j]&0x0f=State[i][j]
		}
	}

}
////////////////////////////////////////////////////////////////////////////////////////////////
Aes::ShiftRows()
{
	unsigned char temp[4*4];                                        //Page105
	int i,j;
	for(j=0;j<4;j++)
	{
		for(i=0;i<4;i++)
		{
			temp[4*i+j]=State[i][j];
		}
	}
	for(i=1;i<4;i++)
	{
		for(j=0;j<4;j++)
		{
			if(i==1)State[i][j]=temp[4*i+(j+1)%4];					//第一行左移1位
			else if(i==2)State[i][j]=temp[4*i+(j+2)%4];				//第二行左移2位
			else if(i==3)State[i][j]=temp[4*i+(j+3)%4];				//第三行左移3位
		}
	}

}
Aes::InvShiftRows()
{
	unsigned char temp[4*4];
	int i,j;
	for(j=0;j<4;j++)
	{
		for(i=0;i<4;i++)
		{
			temp[4*i+j]=State[i][j];
		}
	}
	for(i=1;i<4;i++)
	{
		for(j=0;j<4;j++)
		{
			//if(i==1)State[i][j]=temp[4*i+(j-1)%4];    在此犯了一個(gè)錯(cuò)誤 -1%4=-1 而不是3,所以采用了下面再加一個(gè)4的做法
			if(i==1)State[i][j]=temp[4*i+(j+3)%4];			//第一行右移1位 j-1+4=j+3
			else if(i==2)State[i][j]=temp[4*i+(j+2)%4];		//第二行右移2位 j-2+4=j+2
			else if(i==3)State[i][j]=temp[4*i+(j+1)%4];		//第三行右移3位 j-3+4=j+2
		}
	}
	
}
////////////////////////////////////////////////////////////////////////////////////////////////
Aes::MixColumns()
{
	unsigned char temp[4*4];
	int i,j;
	for(j=0;j<4;j++)                                    //2 3 1 1  列混淆矩陣  Page107
	{													//1 2 3 1
		for(i=0;i<4;i++)								//1 1 2 3
		{												//3 1 1 2
			temp[4*i+j]=State[i][j];
		}
	}
	for(j=0;j<4;j++)
	{
		State[0][j] = (unsigned char) ( (int)gfmultby02(temp[0+j]) ^ (int)gfmultby03(temp[4*1+j]) ^
			(int)gfmultby01(temp[4*2+j]) ^ (int)gfmultby01(temp[4*3+j]) );
		State[1][j] = (unsigned char) ( (int)gfmultby01(temp[0+j]) ^ (int)gfmultby02(temp[4*1+j]) ^
			(int)gfmultby03(temp[4*2+j]) ^ (int)gfmultby01(temp[4*3+j]) );
		State[2][j] = (unsigned char) ( (int)gfmultby01(temp[0+j]) ^ (int)gfmultby01(temp[4*1+j]) ^
			(int)gfmultby02(temp[4*2+j]) ^ (int)gfmultby03(temp[4*3+j]) );
		State[3][j] = (unsigned char) ( (int)gfmultby03(temp[0+j]) ^ (int)gfmultby01(temp[4*1+j]) ^
			(int)gfmultby01(temp[4*2+j]) ^ (int)gfmultby02(temp[4*3+j]) );
	}
	
}
Aes::InvMixColumns()
{
	unsigned char temp[4*4];
	int i,j;
	for (i = 0; i < 4; i++)  // copy State into temp[]
	{
        for (j = 0; j < 4; j++)                         //0e 0b 0d 09   逆變換矩陣 Page108
        {												//09 0e 0b 0d
			temp[4*i+j] =  State[i][j];					//0d 09 0e 0b
        }												//0b 0d 09 0e
	}
	
	for (j = 0; j < 4; j++)
	{
		State[0][j] = (unsigned char) ( (int)gfmultby0e(temp[j]) ^ (int)gfmultby0b(temp[4+j]) ^
			(int)gfmultby0d(temp[4*2+j]) ^ (int)gfmultby09(temp[4*3+j]) );
		State[1][j] = (unsigned char) ( (int)gfmultby09(temp[j]) ^ (int)gfmultby0e(temp[4+j]) ^
			(int)gfmultby0b(temp[4*2+j]) ^ (int)gfmultby0d(temp[4*3+j]) );
		State[2][j] = (unsigned char) ( (int)gfmultby0d(temp[j]) ^ (int)gfmultby09(temp[4+j]) ^
			(int)gfmultby0e(temp[4*2+j]) ^ (int)gfmultby0b(temp[4*3+j]) );
		State[3][j] = (unsigned char) ( (int)gfmultby0b(temp[j]) ^ (int)gfmultby0d(temp[4+j]) ^
			(int)gfmultby09(temp[4*2+j]) ^ (int)gfmultby0e(temp[4*3+j]) );
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char Aes::gfmultby01(unsigned char b)
{
	return b;
}
unsigned char Aes::gfmultby02(unsigned char b)
{
	if (b < 0x80)
        return (unsigned char)(int)(b <<1);
	else
        return (unsigned char)( (int)(b << 1) ^ (int)(0x1b) );
}

unsigned char Aes::gfmultby03(unsigned char b)
{
	return (unsigned char) ( (int)gfmultby02(b) ^ (int)b );
}

unsigned char Aes::gfmultby09(unsigned char b)
{
	return (unsigned char)( (int)gfmultby02(gfmultby02(gfmultby02(b))) ^ (int)b );
}

unsigned char Aes::gfmultby0b(unsigned char b)
{
	return (unsigned char)( (int)gfmultby02(gfmultby02(gfmultby02(b))) ^
		(int)gfmultby02(b) ^ (int)b );
}

unsigned char Aes::gfmultby0d(unsigned char b)
{
	return (unsigned char)( (int)gfmultby02(gfmultby02(gfmultby02(b))) ^
		(int)gfmultby02(gfmultby02(b)) ^ (int)(b) );
}

unsigned char Aes::gfmultby0e(unsigned char b)
{
	return (unsigned char)( (int)gfmultby02(gfmultby02(gfmultby02(b))) ^
		(int)gfmultby02(gfmultby02(b)) ^(int)gfmultby02(b) );
}
////////////////////////////////////////////////////////////////////////////////////////////////

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲h精品动漫在线观看| 成人免费毛片片v| 国产高清不卡二三区| 欧美视频一二三区| 国产欧美日韩在线看| 奇米影视在线99精品| 日本精品视频一区二区三区| 久久久www免费人成精品| 亚洲成a人v欧美综合天堂| 成人福利在线看| 国产亚洲欧美日韩在线一区| 日本亚洲三级在线| 欧美日韩另类一区| 亚洲资源在线观看| 91麻豆文化传媒在线观看| 久久久久久久久岛国免费| 麻豆成人综合网| 日韩一区二区在线免费观看| 亚洲成av人片在www色猫咪| 欧美在线一区二区| 亚洲人吸女人奶水| 91啪亚洲精品| 一区二区三区四区五区视频在线观看 | 欧美三级在线视频| 中文字幕视频一区二区三区久| 精品一二三四区| 久久久久久久久久久久久女国产乱| 蜜桃av一区二区| 精品国产凹凸成av人网站| 国内外成人在线| 久久综合国产精品| 国产精品亚洲第一区在线暖暖韩国 | 国产精品激情偷乱一区二区∴| 美女视频网站久久| 精品毛片乱码1区2区3区| 精品一区二区三区欧美| 久久综合久久综合久久综合| 黄一区二区三区| 欧美经典一区二区三区| 国产不卡一区视频| 国产精品超碰97尤物18| 91久久线看在观草草青青| 一区二区成人在线| 制服丝袜亚洲播放| 狠狠色丁香久久婷婷综合丁香| 久久久久久久久蜜桃| 91在线精品一区二区三区| 自拍av一区二区三区| 欧美日韩精品欧美日韩精品一综合| 奇米一区二区三区av| 久久久综合精品| 91色九色蝌蚪| 免费人成在线不卡| 欧美精彩视频一区二区三区| 色网站国产精品| 日韩av网站在线观看| 久久影院午夜论| 一本到高清视频免费精品| 偷拍亚洲欧洲综合| 国产欧美一区二区精品久导航| jlzzjlzz亚洲女人18| 日韩国产精品大片| 国产精品私人自拍| 欧美精品久久久久久久多人混战 | 久久这里只有精品6| 9l国产精品久久久久麻豆| 香蕉成人啪国产精品视频综合网| 欧美精品一区二区精品网| 99精品偷自拍| 麻豆久久一区二区| 亚洲欧美一区二区三区国产精品 | 高清不卡一区二区| 日韩国产在线观看| 亚洲欧美成人一区二区三区| 欧美一区二区日韩| 91国产福利在线| 国产麻豆日韩欧美久久| 婷婷成人综合网| 亚洲三级在线播放| 久久久久久久久久久99999| 欧美日韩国产综合视频在线观看| 国产激情91久久精品导航| 亚洲成av人影院| 亚洲天堂精品视频| 国产亲近乱来精品视频| 日韩一区二区在线播放| 在线亚洲免费视频| 成人免费av网站| 国产一区二区三区四区在线观看 | 亚洲电影在线播放| 综合久久一区二区三区| 久久久久久麻豆| 精品国产一区二区三区忘忧草| 色狠狠桃花综合| 粉嫩嫩av羞羞动漫久久久| 六月丁香综合在线视频| 日日夜夜免费精品| 亚洲国产精品欧美一二99| 17c精品麻豆一区二区免费| 中文字幕免费不卡| 久久精品欧美一区二区三区不卡| 欧美一区二区福利视频| 欧美绝品在线观看成人午夜影视| 色94色欧美sute亚洲线路二| 972aa.com艺术欧美| 不卡的看片网站| 成人av在线电影| www.日韩精品| 99国产精品一区| a级高清视频欧美日韩| 99久久国产综合色|国产精品| 成人高清视频在线观看| 91丨porny丨户外露出| 91麻豆国产福利在线观看| 91久久精品网| 欧美性xxxxx极品少妇| 欧美日韩精品欧美日韩精品一| 欧美日韩亚州综合| 日韩一区二区免费视频| 2022国产精品视频| 中文在线免费一区三区高中清不卡| 久久久五月婷婷| 国产精品人妖ts系列视频| 中文字幕一区二区三区色视频| 亚洲欧美电影一区二区| 亚洲成人高清在线| 国内久久精品视频| 成人福利视频网站| 91久久香蕉国产日韩欧美9色| 欧美美女直播网站| 精品少妇一区二区三区在线播放 | 国产欧美一区二区三区网站| 国产精品女人毛片| 亚洲精品五月天| 亚洲不卡av一区二区三区| 韩国女主播一区二区三区| 成人国产一区二区三区精品| 欧美三级在线视频| 久久久美女艺术照精彩视频福利播放| 国产喷白浆一区二区三区| 亚洲欧美韩国综合色| 久久草av在线| 91美女在线观看| 精品久久人人做人人爰| 亚洲欧美精品午睡沙发| 久久成人综合网| 欧美影视一区在线| www国产成人| 一区二区高清在线| 国产精品自在欧美一区| 欧美色偷偷大香| 久久久99精品免费观看| 一区二区三区高清不卡| 激情亚洲综合在线| 欧美性生活大片视频| 久久久久99精品国产片| 亚洲大片免费看| 波多野结衣在线一区| 日韩美女主播在线视频一区二区三区 | 日韩高清国产一区在线| 成人动漫一区二区| 日韩一级高清毛片| 一区二区三区精品视频| 国产成人无遮挡在线视频| 3d动漫精品啪啪1区2区免费| 国产精品对白交换视频| 激情文学综合插| 欧美一级在线观看| 亚洲激情图片qvod| 9久草视频在线视频精品| 欧美va亚洲va香蕉在线| 亚洲bt欧美bt精品| 色乱码一区二区三区88 | 欧美一级爆毛片| 亚洲国产精品人人做人人爽| 国产福利精品导航| 精品国产一区二区三区久久久蜜月| 亚洲国产日韩一级| 91视频精品在这里| 国产精品久线在线观看| 国产成人精品在线看| 26uuu另类欧美| 美女视频一区二区| 欧美一区2区视频在线观看| 亚洲一区视频在线观看视频| 91免费视频网| 国产精品免费人成网站| 国产精品一区二区三区乱码| 久久久久久久久久久久电影| 国产最新精品免费| 久久久久国产精品人| 国产精品亚洲第一区在线暖暖韩国| 日韩精品一区二区三区在线 | 国产清纯白嫩初高生在线观看91| 黄网站免费久久| 亚洲精品在线观看视频| 国模娜娜一区二区三区| 久久精品欧美日韩| 成人丝袜高跟foot| ...av二区三区久久精品|