#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "aes.h"
unsigned char *dump_hex(unsigned char *data, unsigned short len)
{
// 코드 생략
}
/* AES128-CBC TEST PROGRAM */
int main(int argc, char **argv)
{
unsigned char plain_text[64]= {0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10};
unsigned char iv[16]={0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};
unsigned char iv_tmp[16]={0,};
unsigned char key[16]={0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c};
unsigned char crypted_text[64];
/* It should be
0x76, 0x49, 0xab, 0xac, 0x81, 0x19, 0xb2, 0x46, 0xce, 0xe9, 0x8e, 0x9b, 0x12, 0xe9, 0x19, 0x7d,
0x50, 0x86, 0xcb, 0x9b, 0x50, 0x72, 0x19, 0xee, 0x95, 0xdb, 0x11, 0x3a, 0x91, 0x76, 0x78, 0xb2,
0x73, 0xbe, 0xd6, 0xb8, 0xe3, 0xc1, 0x74, 0x3b, 0x71, 0x16, 0xe6, 0x9e, 0x22, 0x22, 0x95, 0x16,
0x3f, 0xf1, 0xca, 0xa1, 0x68, 0x1f, 0xac, 0x09, 0x12, 0x0e, 0xca, 0x30, 0x75, 0x86, 0xe1, 0xa7*/
aes_encrypt_ctx e_ctx;
aes_decrypt_ctx d_ctx;
printf("===========================================================\n");
printf("KEY: %s\n", dump_hex(key, sizeof(key)));
printf("IV: %s\n", dump_hex(iv, sizeof(iv)));
printf("-----------------------------------------------------------\n\n");
/* ENCRYPTION */
memcpy(iv_tmp, iv, sizeof(iv));
aes_encrypt_key(key, sizeof(key), &e_ctx);
aes_cbc_encrypt(plain_text, crypted_text, sizeof(plain_text), iv_tmp, &e_ctx); /*iv is changed after this operation*/
printf("===========================================================\n");
printf("PLAIN SRC: %s \n", dump_hex(plain_text, sizeof(plain_text)) );
printf("ENCRYPTED: %s\n", dump_hex(crypted_text, sizeof(crypted_text)));
printf("-----------------------------------------------------------\n\n");
/* DECRYPTION */
memset(plain_text, 0, sizeof(plain_text));
memcpy(iv_tmp, iv, sizeof(iv));
aes_decrypt_key(key, sizeof(key), &d_ctx);
aes_cbc_decrypt(crypted_text, plain_text, sizeof(crypted_text) , iv_tmp, &d_ctx); /*original iv is needed to do this*/
printf("===========================================================\n");
printf("ENCRYPTED SRC: %s \n", dump_hex(crypted_text, sizeof(crypted_text)) );
printf("DECRYPTED(PLAIN): %s \n", dump_hex(plain_text, sizeof(plain_text)) );
printf("-----------------------------------------------------------\n\n");
return 0;
}
Dev Tool Tips/Algorithms2012. 4. 5. 23:42