Почему моя расшифровка AWS KMS не возвращает мне только что зашифрованную строку? - PullRequest
0 голосов
/ 19 ноября 2018

Вот мой код:

const AWS = require('aws-sdk');
const btoa = require('btoa');

let kms = new AWS.KMS({
    accessKeyId: 'redacted',
    secretAccessKey: 'redacted',
    region: 'us-east-1'
});

let params = {
    KeyId: 'redacted',
    Plaintext: 'abcde'
 };

let encrypted = kms.encrypt(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else {
        let x = {
            CiphertextBlob: data.CiphertextBlob
        };

        kms.decrypt(x, function(err, data) {
            if (err) console.log(err, err.stack); // an error occurred
            else     console.log(btoa(data.Plaintext));           // successful response
        });
    }
 });

Я просто пытаюсь зашифровать строку abcde, а затем расшифровать ее, но это не работает. Некоторое время я получал InvalidCipherException, но теперь вывод console.log(btoa(data.Plaintext)); равен YWJjZGU=.

Я не могу понять, что я делаю здесь неправильно, но я подозреваю, что это связано с кодировкой base64. Я пробовал так много вариантов этого кода, но не могу вывести проблему. Кто-нибудь видит, что я здесь делаю не так?

1 Ответ

0 голосов
/ 19 ноября 2018

Я использовал btoa, когда я должен был использовать atob. Клянусь, я уже пробовал это, но кто может сказать.

Поскольку я думал, что atob был ASCII для двоичного кода, я не могу объяснить, как я получаю открытый текст с функцией, которая должна выдавать двоичный файл, но ... это сработало, так что.

Редактировать : Думать об этом как ASCII для Binary вводит в заблуждение. Это больше похоже на «формат передачи» на «оригинальный контент», каким бы он ни был.

Метод KMS.decrypt хочет получить двоичную строку, которая здесь является «исходным содержимым». KMS.encrypt base64 кодирует зашифрованную строку для передачи, и KMS.decrypt ожидает, что она будет закодирована из этого формата перед передачей в качестве параметра.

...