

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS Encryption SDK for Go 範例程式碼
<a name="go-examples"></a>

下列範例顯示使用 AWS Encryption SDK for Go 進行程式設計時所使用的基本編碼模式。具體而言，您會執行個體化 AWS Encryption SDK 和材料提供者程式庫。然後，在呼叫每個方法之前，您可以執行個體化定義方法輸入的物件。

如需示範如何在 中設定選項的範例 AWS Encryption SDK，例如指定替代演算法套件和限制加密的資料金鑰，請參閱 GitHub 上 aws-encryption-sdk 儲存庫中的 [Go 範例](https://github.com/aws/aws-encryption-sdk/tree/mainline/releases/go/encryption-sdk/examples)。

## 在 AWS Encryption SDK for Go 中加密和解密資料
<a name="go-example-encrypt"></a>

此範例顯示加密和解密資料的基本模式。它會使用受到一個 AWS KMS 包裝金鑰保護的資料金鑰來加密少量資料。

**步驟 1：執行個體化 AWS Encryption SDK。**  
您將使用 中的方法來 AWS Encryption SDK 加密和解密資料。  

```
import (
    "context"

    mpl "aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygenerated"
    mpltypes "aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygeneratedtypes"
    client "github.com/aws/aws-encryption-sdk/awscryptographyencryptionsdksmithygenerated"
    esdktypes "github.com/aws/aws-encryption-sdk/awscryptographyencryptionsdksmithygeneratedtypes"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/kms"
)

encryptionClient, err := client.NewClient(esdktypes.AwsEncryptionSdkConfig{})
if err != nil {
    panic(err)
}
```

**步驟 2：建立 AWS KMS 用戶端。**  

```
cfg, err := config.LoadDefaultConfig(context.TODO())
if err != nil {
    panic(err)
}
kmsClient := kms.NewFromConfig(cfg, func(o *kms.Options) {
    o.Region = KmsKeyRegion
})
```

**選用：建立您的加密內容。**  

```
encryptionContext := map[string]string{
    "encryption":                "context",
    "is not":                    "secret",
    "but adds":                  "useful metadata",
    "that can help you":         "be confident that",
    "the data you are handling": "is what you think it is",
}
```

**步驟 3：執行個體化材料提供者程式庫。**  
您將使用材料提供者程式庫中的方法來建立 keyring，以指定哪些金鑰保護您的資料。  

```
matProv, err := mpl.NewClient(mpltypes.MaterialProvidersConfig{})
if err != nil {
    panic(err)
}
```

**步驟 4：建立 AWS KMS keyring。**  
若要建立 keyring，請使用 keyring 輸入物件呼叫 keyring 方法。此範例使用 `CreateAwsKmsKeyring`方法並指定一個 KMS 金鑰。`kmsKeyId` 變數代表您提供的 KMS 金鑰的金鑰 ARN。  

```
awsKmsKeyringInput := mpltypes.CreateAwsKmsKeyringInput{
    KmsClient: kmsClient,
    KmsKeyId:  kmsKeyId,
}
awsKmsKeyring, err := matProv.CreateAwsKmsKeyring(context.Background(), awsKmsKeyringInput)
if err != nil {
    panic(err)
}
```

**步驟 5：加密純文字。**  

```
res, err := encryptionClient.Encrypt(context.Background(), esdktypes.EncryptInput{
    Plaintext:         []byte(exampleText),
    EncryptionContext: encryptionContext,
    Keyring:           awsKmsKeyring,
})
if err != nil {
    panic(err)
}

ciphertext := res.Ciphertext
```

**步驟 6：使用您在加密時使用的相同 keyring 來解密加密的資料。**  

```
decryptOutput, err := encryptionClient.Decrypt(context.Background(), esdktypes.DecryptInput{
    Ciphertext:        ciphertext,
    // Provide the encryption context that was supplied to the encrypt method
    EncryptionContext: encryptionContext,
    Keyring:           awsKmsKeyring,
})
if err != nil {
    panic(err)
}

decrypted := decryptOutput.Plaintext
```