//此演算法,是以金鑰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進行介紹,另外兩種的思路...