Как получить ответ aws kms encrypt в виде строки base64. Получение Uint8Array в качестве ответа

я использую @aws-sdk/client-kmsзашифровать данные. В ответ я получал строку base64. Теперь я получаю Uint8Array.

       const encryptedBlob = await kms.encrypt({
    KeyId: kmsKey,
    Plaintext: Buffer.from(JSON.stringify('data to encrypt')),
  });

Зашифрованный открытый текст. Когда вы используете HTTP API или AWS CLI, значение закодировано в Base64. В противном случае он не закодирован в Base64. Упоминается в документации AWS

Есть ли способ получить base64 в качестве ответа в nodeJs.

1 ответ

Как упоминалось в документации по AWS SDK v3, документы - только HTTP API и интерфейс командной строки получат данные base64. Другие среды получат Uint8Array как ответ.

Итак, нам нужно дополнительное преобразование данных для обеспечения шифрования и дешифрования с помощью SDK.

      const { KMSClient, EncryptCommand, DecryptCommand } = require('@aws-sdk/client-kms');

const client = new KMSClient({ region: AWS_REGION });

// Encrypt
// Convert Uint8Array data to base64

const input = {
  KeyId: kmsKey,
  Plaintext: Buffer.from(JSON.stringify(credentials)),
};

const command = new EncryptCommand(input);
const encryptedBlob = await client.send(command);

const buff = Buffer.from(encryptedBlob.CiphertextBlob);
const encryptedBase64data = buff.toString('base64');

// Decrypt
// Convert Base64 data to Uint8Array
// Uint8Array(response) convert to string.

const command = new DecryptCommand({
    CiphertextBlob: Uint8Array.from(atob(item.credentials), (v) => v.charCodeAt(0)),
  });
const decryptedBinaryData = await client.send(command);

const decryptedData = String.fromCharCode.apply(null, new Uint16Array(decryptedBinaryData.Plaintext));
Другие вопросы по тегам