'Dev Tool Tips/Algorithms'에 해당되는 글 1건

  1. 2012.04.05 Brian Gladman의 AES implementation을 이용한 간단한 AES-128 CBC TEST Code
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