AES加密算法之輪密鑰加操作

以AES算法明文128bit、密鑰128bit爲例:

輪密鑰加操作就是將輪密鑰與明文(狀態)按比特異或。輪密鑰通過密鑰擴展得到,初始密鑰與初始明文均是用戶自己設置。簡單來說,密鑰加操作就是逐字節相加,有限域GF(28)上的加法是2加法,即異或。


附上自己敲的C語言源碼:

#include <iostream>
using namespace std;

void PrintfMatrix(unsigned char m[4][4])
{
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<4;j++)
		{
		printf("%2x",m[i][j]);
		if(j%4==3)
			puts("");
		}
		
	}
}

void AddRoundKey(unsigned char state[4][4],unsigned char key[4][4])    //密鑰加函數
{
	int i,j;
	for (i=0;i<4;i++)
	{
		for(j=0;j<4;j++)
		{
			state[i][j]^=key[i][j];          //明文與密鑰的異或,即密鑰加
		}
	}
}
int main()
{
	unsigned char state[4][4]={
		0,4,8,12,
			1,5,9,13,
			2,6,10,14,
			3,7,11,15,
	};
	unsigned char key[4][4]={
		0,1,2,3,
			4,5,6,7,
			8,9,10,11,
			12,13,14,15,
	};
	printf("明文爲:\n");PrintfMatrix(state);
	printf("密鑰爲:\n");PrintfMatrix(key);
	AddRoundKey(state,key);                        //在主函數中調用密鑰加函數
	printf("密鑰加結果:\n");PrintfMatrix(state);
	return 0;
}
程序運行結果如下:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章