Реализация AES-128 CBC путем передачи массива в качестве входных данных - PullRequest
0 голосов
/ 06 сентября 2018

Я работаю над AES-128/192/256, в основном я получаю данные от брокера в виде строки, мне просто нужно зашифровать эти данные, и мне нужно это проверить.

Я уже сталкивался с этими https://github.com/empyreanx/tiny-AES128-C, https://github.com/kokke/tiny-AES-c ссылками.

Мой код:

static void test_encrypt_cbc(void)
{
    unsigned char input[] = 
"So_letmeknowRuinterested/towork@thiscompany.comElsewilllookother";   
 //64bits

    unsigned char cipher[sizeof input];

    printf("size of in:%lu\n",strlen(input));

    unsigned char key[] = "Gns7AauH3dnaod==";    //16 bits
    unsigned char iv[] = "vhdNaleuTHenaOlL";     //16 bits

    AES128_CBC_encrypt_buffer(cipher, input, 64, key, iv);

    if(0 == memcmp((char*) cipher, (char*) input, 64))
    {
        printf("SUCCESS!\n");
    }
    else
    {
        printf("FAILURE!\n");
    }
}

Я также печатал зашифрованный текст, после шифрования он печатает какой-то неопределенный символ.

Я не знаю, но я сравниваю "шифр" с "вводом", и, наконец, его СБОЙ!

Пожалуйста, кто-нибудь может сказать мне, где я делаю неправильно.

Заранее спасибо.

1 Ответ

0 голосов
/ 06 сентября 2018

Логично, что cipher отличается от input, не так ли?

Чтобы убедиться, что шифрование работает, вы должны расшифровать закодированное сообщение и убедиться, что они равны:

static void test_encrypt_cbc(void)
{
    /* 64 bytes, or 512 bits */
    unsigned char input[] = 
"So_letmeknowRuinterested/towork@thiscompany.comElsewilllookother";   

    unsigned char cipher[sizeof input];
    unsigned char output[sizeof input];

    printf("size of in:%lu\n",strlen(input));

    /* 16 bytes or 128 bits */
    unsigned char key[] = "Gns7AauH3dnaod==";    
    unsigned char iv[] = "vhdNaleuTHenaOlL";     

    /* input --> cipher */
    AES128_CBC_encrypt_buffer(cipher, input, 64, key, iv);

    /* cipher --> output */
    AES128_CBC_decrypt_buffer(output, cipher, 64, key, iv);

    if(0 == memcmp((char*) output, (char*) input, 64))
    {
        printf("SUCCESS!\n");
    }
    else
    {
        int i;
        printf("FAILURE!\nInput and output are different:\n");
        for (i = 0; i < sizeof input; ++i) 
        {
            printf("%02x - %02x\n", input[i], output[i]);
        }
    }
}
...