Как сохранить значение Net MemorySteam в DynamoDB? - PullRequest
0 голосов
/ 14 февраля 2020

Я использую AWS KMS Encrypt API для шифрования текста. API-интерфейс Encrypt возвращает объект EncryptResponse с атрибутом MemoryStream, который является зашифрованным значением.

Я использую SDK AWS. Net и пытаюсь сохранить это значение в DynamoDB.

Как я могу сохранить это значение? Я попытался преобразовать это в строку, но в то время как преобразование, сохраняющее DynamoDB и поиск, вернуло мне объект MemoryStream, результирующий зашифрованный текст из воссозданного объекта MemoryStream не может быть расшифрован с ошибкой «Неверный зашифрованный текст».

Вот код, используемый для сохранения и извлечения строки

// convert stream to string
StreamReader reader = new StreamReader(ciphertextBlob);
string text = reader.ReadToEnd(); 

// convert string to stream
byte[] byteArray = Encoding.UTF8.GetBytes(text);
MemoryStream stream = new MemoryStream(byteArray);

При извлечении потока было замечено, что зашифрованный текст был другим для объекта перед сохранением и во время извлечения.

1 Ответ

0 голосов
/ 19 февраля 2020

Эта проблема была решена путем преобразования объекта потока памяти в байт [] и сохранения его в виде строки в DynamoDB.

byte[] byteArray = ReadFully(ciphertextBlob);
                    string AccessKeycipherText = Convert.ToBase64String(byteArray);

Кодировка base64 использовалась для получения строкового представления массива байтов.

Объект потока памяти был получен с использованием обратной последовательности.

byte[] temp_backToBytes = Convert.FromBase64String(AccessKey);
                 MemoryStream stream = new MemoryStream(temp_backToBytes);
...