Вы не выполняете последний шаг после шагов обновления для шифрования или дешифрования данных
Этот дефект возникает, когда вы не выполняете последний шаг после шагов обновления для шифрования или дешифрования данных.
Например, выполняется следующее:
/* 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++ |
| По умолчанию: Откл. |
Синтаксис командной строки: CRYPTO_CIPHER_NO_FINAL |
| Воздействие: среднее |
| CWE ID: 311, 325, 372, 664 |