Dev Tool Tips/Algorithms2012. 4. 5. 23:42

#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;
}

Posted by young.h.rhie