Вы не выполняете последний шаг после шагов обновления для шифрования или расшифровки данных
Этот дефект возникает, когда вы не выполняете последний шаг после шагов обновления для шифрования или расшифровки данных.
Например, вы делаете следующее:
/* Initialization of cipher context */ ret = EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key, iv); ... /* Update step */ ret = EVP_EncryptUpdate(&ctx, out_buf, &out_len, src, len); ... /* Missing final step */ ... /* Cleanup of cipher context */ EVP_CIPHER_CTX_cleanup(ctx);
Блочные шифры разбивают ваши данные на блоки фиксированного размера. Во время шифрования или расшифровки шаг обновления шифрует или расшифровывает ваши данные в блоках. Все оставшиеся данные шифруются или расшифровываются на заключительном этапе. Заключительный шаг добавляет заполнение к оставшимся данным так, чтобы оно занимало один блок, и затем шифрует или расшифровывает заполненные данные.
Если вы не выполняете последний шаг, оставшиеся в частичном блоке данные не шифруются и не расшифровываются. Вы можете столкнуться с неполным или неожиданным выходом.
После ваших шагов обновления для шифрования или расшифровки, выполните последний шаг, чтобы зашифровать или расшифровать оставшиеся данные.
/* Initialization of cipher context */ ret = EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key, iv); ... /* Update step(s) */ ret = EVP_EncryptUpdate(&ctx, out_buf, &out_len, src, len); ... /* Final step */ ret = EVP_EncryptFinal_ex(&ctx, out_buf, &out_len); ... /* Cleanup of cipher context */ EVP_CIPHER_CTX_cleanup(ctx);
Группа: Криптография |
Язык: C | C++ |
По умолчанию: Off |
Синтаксис командной строки: CRYPTO_CIPHER_NO_FINAL |
Влияние: Средний |
ИДЕНТИФИКАТОР CWE : 311, 325, 372, 664 |