Этот ответ предназначен для прояснения препроцессора C и того, как он может использоваться для общего программирования
. Они в некоторых отношениях, поскольку они позволяют использовать некоторую подобную семантику. Препроцессор C использовался для создания общих структур данных и алгоритмов (см. токен Concatination ). Однако, не учитывая никаких других особенностей шаблонов C ++, он делает всю родовую программирующую игру LOT CLEARER для чтения и реализации.
Если кто-то хочет видеть хардкор C, то только общее программирование в действии читает libevent sourcecode - здесь также упоминается здесь . Реализована обширная коллекция контейнеров / алгоритмов, и ее сделано в файле заголовка SINGLE (очень читаемо). Я действительно восхищаюсь этим, код шаблона C ++ (который я предпочитаю для других его атрибутов) ОЧЕНЬ многословный.
Причина, по которой вы получаете эту ошибку, заключается в том, что зашифрованный текст, который вы получаете от KMS, не имеет ту же длину, что и открытый текст, который вы зашифровали. Кроме того, KMS не дает никаких гарантий относительно размера или формата этого зашифрованного текста, оставшегося неизменным. Вам следует относиться к зашифрованному тексту KMS как к черному ящику.
Кроме того, KMS не рекомендует отправлять текстовые сообщения напрямую в KMS. Вместо этого они рекомендуют вместо этого использовать шифрование конвертов: используйте KMS для шифрования ключей данных и используйте эти ключи данных для шифрования ваших данных. Это не только приводит к гораздо меньшему количеству обращений к KMS в таких случаях, как ваше, но также создает разделение ресурсов: KMS никогда не имеет ваших зашифрованных данных и ключа, необходимого для их расшифровки.
Для вашего случая использования вы рассматривали возможность использования AWS Encryption SDK [1] [2]? Он обеспечивает простую в использовании реализацию шифрования конвертов и упрощает использование KMS для защиты ваших данных. Вы можете найти пример его настройки для использования KMS здесь [3] и пример шифрования и дешифрования файла здесь [4].
[1] https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html
[2] https : //aws-encryption-sdk-python.readthedocs.io/en/stable/