AES密碼演算法

2021-07-12 03:48:53 字數 2021 閱讀 7113

//此演算法,是以金鑰128位為例,輸入輸出都是十六進製制。

//測試資料:

//明文:32 43 f6 a8  88  5a  30  8d  31  31  98  a2   e0 37  07  34

//金鑰:2b 7e 15 16  28  ae  d2   a6  ab   f7  15  88   09  cf   4f    3c

//密文:39 25 84 1d 02  dc 09   fb  dc 11  85  97  19  6a  0b  32

#includeint m[4][4],a[4][4];  // m --> 明文,密文  a --> 初始金鑰

unsigned char s_box =

;int c[4][4]=;

int rc = ;

int key[11][4][4];//存放10次金鑰+1次初試

// 輸出函式

void print(int t[4])

//s盒

void s_box()

// 行移位

void rows()

} printf("\n行移位:\n");

print(m); // 輸出函式

}// 列混淆

int col_m(int a,int c) //乘法運算

else t=c*a;

if(t & 0x100 ) // 如果超過8位

return t;

}void column()

} printf("\n列混淆:\n");

print(m); // 輸出函式

}// 輪金鑰加

void key_plus(int t)

// 子金鑰

void key()

k[0]^=rc[i-1];//異或rc

}for(r=0; r<4; r++)

key[i][r][j]=key[i-1][r][j]^k[r];//異或上一輪對應的

} }

}// aes加密演算法實現

void aes_jiami()

s_box(); // s盒變換

rows(); // 行移位變換

if(i!=10) // 第10次不用

column(); // 列混淆變換

key_plus(i); // 輪金鑰加變換 }}

// 行列置換

void row_col(int a[4],int b[4])

void main()

, b[4][4]=;

// 輸入明文

printf("請輸入明文(16進製制,16個位元組):\n");

for(i=0;i<4;i++)

for(j=0;j<4;j++)

scanf("%x",&m[i][j]);

// 輸入金鑰

printf("請輸入金鑰(16進製制,16個位元組):\n");

for(i=0;i<4;i++)

for(j=0;j<4;j++)

scanf("%x",&b[i][j]);

// 明文,金鑰進行行列置換

row_col(m,m);

row_col(a,b);

printf("輸出置換後的明文:\n");

print(m);

printf("\n輸出置換後的金鑰:\n");

print(a);

// 加密

aes_jiami();

// 進行行列置換

row_col(m,m);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

m[i][j]=m[i][j];

// 輸出密文

printf("\n\n--------------------密文:--------------------\n");

print(m);

printf("\n");

}

密碼演算法詳解 AES

美國國家標準技術研究所在2001年發布了高階加密標準 aes aes是乙個對稱分組密碼演算法,旨在取代des成為廣泛使用的標準。根據使用的密碼長度,aes最常見的有3種方案,用以適應不同的場景要求,分別是aes 128 aes 192和aes 256。本文主要對aes 128進行介紹,另外兩種的思路...

密碼演算法詳解 AES

美國國家標準技術研究所在2001年發布了高階加密標準 aes aes是乙個對稱分組密碼演算法,旨在取代des成為廣泛使用的標準。根據使用的密碼長度,aes最常見的有3種方案,用以適應不同的場景要求,分別是aes 128 aes 192和aes 256。本文主要對aes 128進行介紹,另外兩種的思路...

AES密碼演算法系列1 AES密碼演算法原理詳解

美國國家標準技術研究所在2001年發布了高階加密標準 aes aes是乙個對稱分組密碼演算法,旨在取代des成為廣泛使用的標準。根據使用的密碼長度,aes最常見的有3種方案,用以適應不同的場景要求,分別是aes 128 aes 192和aes 256。本文主要對aes 128進行介紹,另外兩種的思路...