本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Encryption SDK for Go 範例程式碼
下列範例顯示使用 AWS Encryption SDK for Go 進行程式設計時所使用的基本編碼模式。具體而言,您會執行個體化 AWS Encryption SDK 和材料提供者程式庫。然後,在呼叫每個方法之前,您可以執行個體化定義方法輸入的物件。
如需示範如何在 中設定選項的範例 AWS Encryption SDK,例如指定替代演算法套件和限制加密的資料金鑰,請參閱 GitHub 上 aws-encryption-sdk 儲存庫中的 Go 範例
在 AWS Encryption SDK for Go 中加密和解密資料
此範例顯示加密和解密資料的基本模式。它會使用受到一個 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