Вопрос по openssl, linux, c – OpenSSL с использованием EVP против алгоритма API для симметричного шифрования

17

Привет, я установил openssl на мою машину с Linux и просматривал заголовочные файлы и документацию (что крайне недостаточно :().

Я пытаюсь создать проект (в «c»), который использует симметричные криптоалгоритмы (я сосредоточен на aes256cbc). Проблема в том, что я запутался в том, как использовать библиотечные функции в моем коде.

Для моей реализации aes256cbc я могу напрямую использовать функции, определенные в «aes.h»; Заголовочный файл (который появился у меня на первом месте).

Но при поиске в Google я наткнулся на какое-то учебное пособие по этому вопросу, в котором используется «evp.h»; функции для этогоhttp://saju.net.in/code/misc/openssl_aes.c.txt

Есть ли конкретная причина для этого или прямой доступ к функциям aes.h лучше.

And also if someone can point me to a good documentation/tutorial of any kind on using the crypto library of openssl will be much appreciated.

большое спасибо

P.S простите меня, если я наивен

Ваш Ответ

1   ответ
27

что вы можете использовать один и тот же API для всех симметричных шифров, которые поддерживает OpenSSL, в общем виде. Это облегчает замену используемого алгоритма или делает его настраиваемым пользователем на более позднем этапе. Большая часть написанного вами кода не относится к выбранному вами алгоритму шифрования.

Вот простой пример шифрования с помощью AES-256 в режиме CBC:

#include <stdio.h>
#include <openssl/evp.h>

int main()
{
    EVP_CIPHER_CTX ctx;
    unsigned char key[32] = {0};
    unsigned char iv[16] = {0};
    unsigned char in[16] = {0};
    unsigned char out[32]; /* at least one block longer than in[] */
    int outlen1, outlen2;

    EVP_EncryptInit(&ctx, EVP_aes_256_cbc(), key, iv);
    EVP_EncryptUpdate(&ctx, out, &outlen1, in, sizeof(in));
    EVP_EncryptFinal(&ctx, out + outlen1, &outlen2);

    printf("ciphertext length: %d\n", outlen1 + outlen2);

    return 0;
}

Для простоты я пропустил обработку ошибок.

IMO одна из самых важных частей документации по OpenSSL - это Сетевая безопасность с OpenSSL от Viega / Messier / Chandra. Это с 2002 года (0.9.7), поэтому оно не охватывает изменения в OpenSSL за последние 10 лет, но это IMO по-прежнему менее болезненный способ изучения OpenSSL, чем использование только справочных страниц.

Похожие вопросы