Node.js 为什么我的AWS KMS decrypt没有返回我刚刚加密的字符串?

Node.js 为什么我的AWS KMS decrypt没有返回我刚刚加密的字符串?,node.js,amazon-web-services,encryption,base64,aws-kms,Node.js,Amazon Web Services,Encryption,Base64,Aws Kms,这是我的密码: 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' };

这是我的密码:

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,然后解密它,但这不起作用。有一段时间我得到了InvalidCiphereException,但现在console.logbtoadata.Plaintext的输出;是YWJZGU=

我无法理解我在这里做错了什么,但我怀疑这与base64编码有关。我在这段代码上尝试了很多变体,但无法推断出问题所在。有人知道我做错了什么吗?

我在使用btoa,而我本应该使用atob。我发誓我已经试过了,但谁能说呢

因为我认为atob是ASCII到二进制的转换,所以我无法解释我是如何用一个应该给出二进制的函数得到明文的,但是…它起作用了,所以

编辑:将其视为ASCII到二进制的转换是错误的。它更像是原始内容的传输格式,不管内容是什么

decrypt方法需要一个二进制字符串,它是此处的原始内容。KMS.encrypt base64对加密字符串进行编码以进行传输,KMS.decrypt希望在将其作为参数给出之前将其编码为该格式