⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aes_func.c

📁 该文件属于c++运行环境下AES加密程序源码。
💻 C
📖 第 1 页 / 共 2 页
字号:
	statemt[15] =  invSbox[statemt[3] >> 4][statemt[3] & 0xf];
	statemt[3] =  invSbox[statemt[7] >> 4][statemt[7] & 0xf];
	statemt[7] =  invSbox[statemt[11] >> 4][statemt[11] & 0xf];
	statemt[11] = temp;

	statemt[0] = invSbox[statemt[0] >> 4][statemt[0] & 0xf];
	statemt[4] = invSbox[statemt[4] >> 4][statemt[4] & 0xf];
	statemt[8] = invSbox[statemt[8] >> 4][statemt[8] & 0xf];
	statemt[12] = invSbox[statemt[12] >> 4][statemt[12] & 0xf];
	break;
    case 6:
	temp = invSbox[statemt[21] >> 4][statemt[21] & 0xf];
	statemt[21] = invSbox[statemt[17] >> 4][statemt[17] & 0xf];
	statemt[17] = invSbox[statemt[13] >> 4][statemt[13] & 0xf];
	statemt[13] =  invSbox[statemt[9] >> 4][statemt[9] & 0xf];
	statemt[9] =  invSbox[statemt[5] >> 4][statemt[5] & 0xf];
	statemt[5] =  invSbox[statemt[1] >> 4][statemt[1] & 0xf];
	statemt[1] = temp;

	temp =  invSbox[statemt[22] >> 4][statemt[22] & 0xf];
	statemt[22] =  invSbox[statemt[14] >> 4][statemt[14] & 0xf];
	statemt[14] =  invSbox[statemt[6] >> 4][statemt[6] & 0xf];
	statemt[6]= temp;
	temp =  invSbox[statemt[18] >> 4][statemt[18] & 0xf];
	statemt[18] =  invSbox[statemt[10] >> 4][statemt[10] & 0xf];
	statemt[10] =  invSbox[statemt[2] >> 4][statemt[2] & 0xf];
	statemt[2]=temp;

	temp =  invSbox[statemt[15] >> 4][statemt[15] & 0xf];
	statemt[15] =  invSbox[statemt[3] >> 4][statemt[3] & 0xf];
	statemt[3] = temp;
	temp =  invSbox[statemt[19] >> 4][statemt[19] & 0xf];
	statemt[19] =  invSbox[statemt[7] >> 4][statemt[7] & 0xf];
	statemt[7] = temp;
	temp =  invSbox[statemt[23] >> 4][statemt[23] & 0xf];
	statemt[23] =  invSbox[statemt[11] >> 4][statemt[11] & 0xf];
	statemt[11] = temp;
	
	statemt[0] =  invSbox[statemt[0] >> 4][statemt[0] & 0xf];
	statemt[4] =  invSbox[statemt[4] >> 4][statemt[4] & 0xf];
	statemt[8] =  invSbox[statemt[8] >> 4][statemt[8] & 0xf];
	statemt[12] =  invSbox[statemt[12] >> 4][statemt[12] & 0xf];
	statemt[16] =  invSbox[statemt[16] >> 4][statemt[16] & 0xf];
	statemt[20] =  invSbox[statemt[20] >> 4][statemt[20] & 0xf];

	break;
    case 8:
	temp =  invSbox[statemt[29] >> 4][statemt[29] & 0xf];
	statemt[29]= invSbox[statemt[25] >> 4][statemt[25] & 0xf];
	statemt[25]=  invSbox[statemt[21] >> 4][statemt[21] & 0xf];
	statemt[21] =  invSbox[statemt[17] >> 4][statemt[17] & 0xf];
	statemt[17] =  invSbox[statemt[13] >> 4][statemt[13] & 0xf];
	statemt[13] =  invSbox[statemt[9] >> 4][statemt[9] & 0xf];
	statemt[9] =  invSbox[statemt[5] >> 4][statemt[5] & 0xf];
	statemt[5] =  invSbox[statemt[1] >> 4][statemt[1] & 0xf];
	statemt[1] = temp;

	temp =  invSbox[statemt[30] >> 4][statemt[30] & 0xf];
	statemt[30]= invSbox[statemt[18] >> 4][statemt[18] & 0xf];
	statemt[18]= invSbox[statemt[6] >> 4][statemt[6] & 0xf];
	statemt[6]=  invSbox[statemt[26] >> 4][statemt[26] & 0xf];
	statemt[26]= invSbox[statemt[14] >> 4][statemt[14] & 0xf];
	statemt[14]=  invSbox[statemt[2] >> 4][statemt[2] & 0xf];
	statemt[2]=  invSbox[statemt[22] >> 4][statemt[22] & 0xf];
	statemt[22]=  invSbox[statemt[10] >> 4][statemt[10] & 0xf];
	statemt[10]=temp;

	temp =  invSbox[statemt[31] >> 4][statemt[31] & 0xf];
	statemt[31] =  invSbox[statemt[15] >> 4][statemt[15] & 0xf];
	statemt[15] = temp;
	temp =  invSbox[statemt[27] >> 4][statemt[27] & 0xf];
	statemt[27] =  invSbox[statemt[11] >> 4][statemt[11] & 0xf];
	statemt[11] = temp;
	temp =  invSbox[statemt[23] >> 4][statemt[23] & 0xf];
	statemt[23] =  invSbox[statemt[7] >> 4][statemt[7] & 0xf];
	statemt[7] = temp;
	temp =  invSbox[statemt[19] >> 4][statemt[19] & 0xf];
	statemt[19] =  invSbox[statemt[3] >> 4][statemt[3] & 0xf];
	statemt[3] = temp;

	statemt[0] =  invSbox[statemt[0] >> 4][statemt[0] & 0xf];
	statemt[4] =  invSbox[statemt[4] >> 4][statemt[4] & 0xf];
	statemt[8] =  invSbox[statemt[8] >> 4][statemt[8] & 0xf];
	statemt[12] =  invSbox[statemt[12] >> 4][statemt[12] & 0xf];
	statemt[16] =  invSbox[statemt[16] >> 4][statemt[16] & 0xf];
	statemt[20] =  invSbox[statemt[20] >> 4][statemt[20] & 0xf];
	statemt[24] =  invSbox[statemt[24] >> 4][statemt[24] & 0xf];
	statemt[28] =  invSbox[statemt[28] >> 4][statemt[28] & 0xf];
	break;
    }
}


/* ******** MixColumn ********** */
int MixColumn_AddRoundKey(int statemt[32],int nb,int n){    
    int ret[8*4],j;
     register int x;
    for (j=0;j<nb;++j)
    {
	    ret[j*4]=(statemt[j*4] << 1);
	    if ((ret[j*4] >> 8) == 1) ret[j*4] ^= 283;
	    x = statemt[1 + j*4];
	    x ^= (x << 1); 
	    if (( x >> 8) == 1) ret[j*4] ^= (x ^ 283);
	    else ret[j*4] ^= x;
	    ret[j*4] ^= statemt[2 + j*4] ^ statemt[3 + j*4]
		^ word[0][j+nb*n] ;
	  	    
	    ret[1+j*4]=(statemt[1+j*4] << 1);
	    if ((ret[1+j*4] >> 8) == 1) ret[1 + j*4] ^= 283;
	    x=statemt[2 + j*4];
	    x ^= (x << 1); 
	    if (( x >> 8) == 1) ret[1+j*4] ^= (x ^ 283);
	    else ret[1+j*4] ^= x;
	    ret[1+j*4] ^= statemt[3 + j*4] ^ statemt[j*4] 
		^ word[1][j+nb*n] ;
	    
	    ret[2+j*4]=(statemt[2+j*4] << 1);
	    if ((ret[2+j*4] >> 8) == 1) ret[2 + j*4] ^= 283;
	    x=statemt[3 + j*4];
	    x ^= (x << 1); 
	    if (( x >> 8) == 1) ret[2+j*4] ^= (x ^ 283);
	    else ret[2+j*4] ^= x;
	    ret[2+j*4] ^= statemt[j*4] ^ statemt[1 + j*4] 
		^ word[2][j+nb*n] ;
	    
	    ret[3+j*4]=(statemt[3+j*4] << 1);
	    if ((ret[3+j*4] >> 8) == 1) ret[3 + j*4] ^= 283;   
	    x=statemt[j*4];
	    x ^= (x << 1); 
	    if (( x >> 8) == 1) ret[3+j*4] ^= (x ^ 283);
	    else ret[3+j*4] ^= x;
	    ret[3+j*4] ^= statemt[1 + j*4] ^ statemt[2+ j*4] 
		^ word[3][j+nb*n];
	} 
    for (j=0;j < nb;++j){
	    statemt[j*4] = ret[j*4] ;
	    statemt[1+j*4] = ret[1 + j*4] ;
	    statemt[2+j*4] = ret[2 + j*4] ;
	    statemt[3+j*4] = ret[3 + j*4] ;
    }
    return 0;
}
/* ******** InversMixColumn ********** */
int AddRoundKey_InversMixColumn(int statemt[32],int nb,int n){
	   int ret[8*4],i,j;
	   register int x;
   for (j=0;j < nb;++j){
       statemt[j*4] ^= word[0][j+nb*n];
       statemt[1+j*4] ^= word[1][j+nb*n];
       statemt[2+j*4] ^= word[2][j+nb*n];
       statemt[3+j*4] ^= word[3][j+nb*n];
   }
    for (j=0;j<nb;++j)
	for (i=0;i<4;++i)
	    {
		x=(statemt[i + j*4] << 1);
		if ((x >> 8) == 1) x ^= 283;
		x ^= statemt[i + j*4]  ;
		x=(x << 1);
		if ((x >> 8) == 1) x ^= 283;
		x ^= statemt[i + j*4]  ;
		x=(x << 1);
		if ((x >> 8) == 1) x ^= 283;
		ret[i + j*4] = x;

		x=(statemt[(i + 1) % 4 + j*4] << 1);
		if ((x >> 8) == 1) x ^= 283;
		x=(x << 1);
		if ((x >> 8) == 1) x ^= 283;
		x ^= statemt[(i + 1) % 4 + j*4]  ;
		x=(x << 1);
		if ((x >> 8) == 1) x ^= 283;
		x ^= statemt[(i + 1) % 4 + j*4]  ;
		ret[i + j*4] ^= x;

		x=(statemt[(i + 2) % 4 + j*4] << 1);
		if ((x >> 8) == 1) x ^= 283;
		x ^= statemt[(i + 2) % 4 + j*4]  ;
		x=(x << 1);
		if ((x >> 8) == 1) x ^= 283;
		x=(x << 1);
		if ((x >> 8) == 1) x ^= 283;
		x ^= statemt[(i + 2) % 4 + j*4]  ;
		ret[i + j*4] ^= x;

		x=(statemt[(i + 3) % 4 + j*4] << 1);
		if ((x >> 8) == 1) x ^= 283;
		x=(x << 1);
		if ((x >> 8) == 1) x ^= 283;
		x=(x << 1);
		if ((x >> 8) == 1) x ^= 283;
		x ^= statemt[(i + 3) % 4 + j*4]  ;
		ret[i + j*4] ^= x;
	    }    
	   for (i=0;i<nb;++i){
	       statemt[i*4] = ret[i*4];
	       statemt[1+i*4] = ret[1+i*4];
	       statemt[2+i*4] = ret[2+i*4];
	       statemt[3+i*4] = ret[3+i*4];}
    return 0;
}
/* ******** AddRoundKey ********** */
int AddRoundKey(int statemt[32],int type,int n){
   int j,nb;
    switch (type){
    case 128128:case 192128:case 256128:nb=4;break;
    case 128192:case 192192:case 256192:nb=6;break;
    case 128256:case 192256:case 256256:nb=8;break;}
   for (j=0;j < nb;++j){
       statemt[j*4] ^= word[0][j+nb*n];
       statemt[1+j*4] ^= word[1][j+nb*n];
       statemt[2+j*4] ^= word[2][j+nb*n];
       statemt[3+j*4] ^= word[3][j+nb*n];
   }
   return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -