Расшифровка с использованием AWS go sdk

Я новичок в Голанге, и застрял в этом вопросе уже на один день. Я пытаюсь написать небольшой фрагмент кода, который расшифровывает (используя AWS go sdk) зашифрованный текст, который был ранее зашифрован (используя AWS python sdk). Я не вижу никаких проблем с этим, поскольку зашифрованное значение является просто строкой в ​​кодировке base64, но я продолжаю сталкиваться с этой ошибкой, InvalidCiphertextExceptionпри попытке расшифровать.

Вот мой код GO:

package main

import (
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/kms"

    "fmt"
    "os"
    "github.com/aws/aws-sdk-go/aws"
    b64 "encoding/base64"
)

func main() {
    // Initialize a session in us-west-2 that the SDK will use to load
    // credentials from the shared credentials file ~/.aws/credentials.
    sess, err := session.NewSession(&aws.Config{
        Region: aws.String("us-east-1")},
    )
    fmt.Println(err)
    // Create KMS service client
    svc := kms.New(sess)
    ciphertext_regular := "AYADeGDoLfFyXv59h9zNJFR+QcgAXwABABVhd3MtY3J5cHRvLXB1YmxpYy1rZXkAREF4ZFRKNjhiZmM3eTNoUTR3S2JsVjNwMHprNFh6NnVrUVdXRUxvMTFuVEpPRnZLODhTMm5CWUdERm85WU5XeGVaZz09AAEAB2F3cy1rbXMAS2Fybjphd3M6a21zOnVzLWVhc3QtMTo0ODIyMzQ4MTEwMDQ6a2V5L2Y0ZWFhOWZjLThlMTYtNGFkNi1iMjVkLWE2NzM3Y2E2NDg4ZQC4AQIBAHiqDEdiAJHv6/rKQOUfXvXVzNboRyJDQ7oz+NqStcjb1AGvjNtfT8oLIQ9Ju7i5TD0HAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMhZXqEceZ0lRyt8ehAgEQgDuhJmDyZ9RJS6+lPy7qSarpaXC7v1MVV0EH3r5XVpwbhTMy0/f2Clyu/OMeSfib/n5Kdkm9AjtSDLaiDgIAAAAADAAAEAAAAAAAAAAAAAAAAABOq2YQN4xM3e9IsJVfPIgi/////wAAAAEAAAAAAAAAAAAAAAEAAAAGEqHCS0KXzFEqy+P7DnpM+c82rApjbQBnMGUCMBlbseoO/TU0Ap2UZ8XTO29sErz90jRdyv/k0j/i2NNXKyYrLHSpm5+hUkSokRvgAwIxAMTt3y/x4bzv5GMmNuIoZduElik538c72dEDX43z/AQc/QKjFHm6omhuBVD+sZo9UA=="
    data, err1 := b64.StdEncoding.DecodeString(ciphertext_regular)

    // Decrypt the data
    result1, err1 := svc.Decrypt(&kms.DecryptInput{CiphertextBlob: data})

    if err1 != nil {
        fmt.Println("Got error decrypting data: ", err1)
        os.Exit(1)
    }

    blob_string := string(result1.Plaintext)

    fmt.Println(blob_string)
}

Я пытался найти его в Интернете, и кажется, что люди делают то же самое, что и я. ( здесь)

Полное сообщение об ошибке:

Got error decrypting data:  InvalidCiphertextException: 
    status code: 400, request id: 35f1ec73-18e3-11e8-9f54-8793fe969339

У кого-нибудь есть идея, почему?

4 ответа

Я слишком долго ждал поддержки Go, поэтому решил реализовать ее сам.

https://github.com/chainifynet/aws-encryption-sdk-go

функции:

  • Только версия 2 формата сообщения
  • Поставщик главных ключей AWS KMS с фильтром обнаружения
  • Поставщик необработанных мастер-ключей, использующий статические ключи
  • Комплексное тестирование e2e, гарантирующее совместимость сaws-encryption-sdk-cli

Из вашего зашифрованного текста я вижу, что вы зашифровали свои данные с помощью контекста шифрования (как упоминает @Xibz). Вы должны предоставить тот же контекст шифрования при расшифровке ваших данных. https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/concepts.html

Комментарий Дуга неверен.

В любом случае, вы устанавливаете контекст шифрования во время шифрования? Если это так, это не удастся расшифровать. Можете ли вы опубликовать пример кода вашего шифрования?

В руководстве разработчика Go приведены примеры шифрования / дешифрования в KMS на Go: https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/kms-example-encrypt-data.html и https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/kms-example-decrypt-blob.html, соответственно.

Другие вопросы по тегам