?? aes_key.c
字號:
/* aes_key.c */
/*
* Copyright (C) 2005
* Akira Iwata & Masayuki Sato
* Akira Iwata Laboratory,
* Nagoya Institute of Technology in Japan.
*
* All rights reserved.
*
* This software is written by Masayuki Sato.
* And if you want to contact us, send an email to Kimitake Wakayama
* (wakayama@elcom.nitech.ac.jp)
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. All advertising materials mentioning features or use of this software must
* display the following acknowledgment:
* "This product includes software developed by Akira Iwata Laboratory,
* Nagoya Institute of Technology in Japan (http://mars.elcom.nitech.ac.jp/)."
*
* 4. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by Akira Iwata Laboratory,
* Nagoya Institute of Technology in Japan (http://mars.elcom.nitech.ac.jp/)."
*
* THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
* AKIRA IWATA LABORATORY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
* IN NO EVENT SHALL AKIRA IWATA LABORATORY BE LIABLE FOR ANY SPECIAL,
* INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
* FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
* NEGLIGENCE OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "aes.h"
/* **************key generate & key display *******************/
int MakeKey(void){
int ret,i;
int ini[32] = {1,2,5,2,1,4,1,5,2,3,2,3,1,5,2,3,2,4,5,2,
1,2,4,5,2,5,3,2,3,4,3,2};
i=0;
srand(time(NULL));
while (i < 32) {
key[i]=(ret=rand()) % 256;srand(ret << ini[i]);++i;
}
return 0;
}
int Key_out(int key[32],int keytype){
int i=0;int outp;
switch (keytype / 1000){
case 128:
outp = 4;break;
case 192:
outp = 6;break;
case 256:
outp = 8;break;
}
printf("key generate.Key is\t");
for (i;i < outp*4;++i){
if (key[i] < 16) printf("0");
printf("%x",key[i]);}
printf("\n");
return 0;
}
/* **************** key expand ************************ */
int KeySchedule(int type,int key[32]){
int nk,nb,round;
int Rcon0[30] = {
0x01,0x02, 0x04, 0x08,
0x10, 0x20, 0x40, 0x80,
0x1b, 0x36, 0x6c, 0xd8,
0xab, 0x4d, 0x9a, 0x2f,
0x5e, 0xbc, 0x63, 0xc6,
0x97, 0x35, 0x6a, 0xd4,
0xb3, 0x7d, 0xfa, 0xef,
0xc5, 0x91, };
int i,j,temp[4];
switch(type) {
case 128128:
nk = 4;nb = 4;round = 10;break;
case 128192:
nk = 4;nb = 6;round = 12;break;
case 128256:
nk = 4;nb = 8;round = 14;break;
case 192128:
nk = 6;nb = 4;round = 12;break;
case 192192:
nk = 6;nb = 6;round = 12;break;
case 192256:
nk = 6;nb = 8;round = 14;break;
case 256128:
nk = 8;nb = 4;round = 14;break;
case 256192:
nk = 8;nb = 6;round = 14;break;
case 256256:
nk = 8;nb = 8;round = 14;break;
default:
return -1;
}
for (j=0;j < nk;++j)
for (i=0;i < 4;++i)
/* 0 word */
word[i][j]= key[i+j*4];
/* expanded key is generated */
for (j=nk;j < nb*(round+1);++j){
/* RotByte */
if ((j % nk) == 0){
temp[0] = SubByte(word[1][j-1]) ^ Rcon0[(j/nk)-1];
temp[1] = SubByte(word[2][j-1]);
temp[2] = SubByte(word[3][j-1]);
temp[3] = SubByte(word[0][j-1]);
}
if ((j % nk) != 0){
temp[0] = word[0][j-1];
temp[1] = word[1][j-1];
temp[2] = word[2][j-1];
temp[3] = word[3][j-1];}
if (nk > 6 && j % nk == 4)
for (i=0;i<4;++i) temp[i]=SubByte(temp[i]);
for (i=0;i<4;++i)
word[i][j] = word[i][j-nk] ^ temp[i];
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -