代码之家  ›  专栏  ›  技术社区  ›  temporary_user_name

为什么我的AWS KMS解密不给我刚加密的字符串?

  •  0
  • temporary_user_name  · 技术社区  · 6 年前

    这是我的代码:

    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 回复  |  直到 6 年前
        1
  •  1
  •   temporary_user_name    6 年前

    我在用 btoa 当我应该用的时候 atob . 我发誓我已经试过了,但谁能说呢。

    自从我想到 空中交通管制局 是从ascii到binary,我无法解释我是如何用一个应该给出binary的函数得到纯文本的,但是……它起作用了,所以。

    编辑 :认为它是从ASCII转换为二进制的做法是误导性的。它更像是“传输格式”到“原始内容”,不管内容是什么。

    这个 KMS.decrypt 方法需要一个二进制字符串,它是这里的“原始内容”。 KMS.encrypt base64对加密字符串进行编码以进行传输,以及 KMs解密 期望在作为参数给定之前用该格式对其进行编码。