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