全部产品
Search
文档中心

Key Management Service:Contoh kode untuk enkripsi dan dekripsi

更新时间:Jul 02, 2025

Setelah menginisialisasi instance SDK KMS, Anda dapat menggunakannya untuk memanggil API Encrypt dan Decrypt guna melakukan enkripsi dan dekripsi data. Topik ini menyediakan contoh kode terkait.

Contoh lengkap

package main

import (
	"fmt"
	"github.com/alibabacloud-go/tea/tea"
	dedicatedkmsopenapi "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi"
	dedicatedkmsopenapiutil "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi-util"
	dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
	"io/ioutil"
)

// Konteks enkripsi AES mungkin disimpan.
type AesEncryptContext struct {
	KeyId          string
	Iv             []byte
	CiphertextBlob []byte
	// Gunakan nilai algoritma default, jika nilainya tidak diatur.
	Algorithm string
}

func main() {
	// Teks biasa yang akan dienkripsi.
	plaintext := "<PLAINTEXT>"
	// ID atau alias (Alias) dari kunci simetris instance KMS.
	keyId := "<SYMMETRIC_KEY_ID>"

	// Buat objek Klien DKMS.
	client := getDkmsClientByClientKeyContent()
	//client := getDkmsClientByClientKeyFile()

	// Contoh enkripsi dan dekripsi kunci simetris.
	cipherCtx := encryptSample(client, []byte(plaintext), keyId)
	decryptResult := decryptSample(client, cipherCtx)
	fmt.Println(string(decryptResult))
}

// Contoh enkripsi simetris.
func encryptSample(client *dedicatedkmssdk.Client, plaintext []byte, keyId string) *AesEncryptContext {
	encryptRequest := &dedicatedkmssdk.EncryptRequest{
		KeyId:     tea.String(keyId),
		Plaintext: plaintext,
	}
	// Verifikasi sertifikat server.
	ca, err := ioutil.ReadFile("path/to/caCert.pem")
	if err != nil {
		panic(err)
	}
	runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
		Verify: tea.String(string(ca)),
	}
	// Atau, abaikan sertifikat.
	//runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
	//	IgnoreSSL: tea.Bool(true),
	//}
	// Panggil API enkripsi untuk mengenkripsi.
	encryptResponse, err := client.EncryptWithOptions(encryptRequest, runtimeOptions)
	if err != nil {
		panic(err)
	}

	// ID Kunci.
	_keyId := tea.StringValue(encryptResponse.KeyId)
	// Saat kunci utama adalah kunci simetris, API dekripsi memerlukan Iv yang dikembalikan oleh enkripsi.
	_iv := encryptResponse.Iv
	// Ciphertext data.
	_cipher := encryptResponse.CiphertextBlob
	// Algoritma enkripsi.
	_algorithm := tea.StringValue(encryptResponse.Algorithm)

	fmt.Println("KeyId:", _keyId)
	fmt.Println("CiphertextBlob:", _cipher)
	fmt.Println("Iv:", _iv)
	fmt.Println("Algorithm:", _algorithm)
	fmt.Println("RequestId:", tea.StringValue(encryptResponse.RequestId))

	return &AesEncryptContext{
		KeyId:          _keyId,
		Iv:             _iv,
		CiphertextBlob: _cipher,
		Algorithm:      _algorithm,
	}
}

// Contoh dekripsi simetris.
func decryptSample(client *dedicatedkmssdk.Client, ctx *AesEncryptContext) []byte {
	decryptRequest := &dedicatedkmssdk.DecryptRequest{
		KeyId:          tea.String(ctx.KeyId),
		CiphertextBlob: ctx.CiphertextBlob, // Ciphertext data.
		Iv:             ctx.Iv,             // Iv yang dikembalikan oleh enkripsi.
		Algorithm:      tea.String(ctx.Algorithm),
	}
	// Verifikasi sertifikat server.
	ca, err := ioutil.ReadFile("path/to/caCert.pem")
	if err != nil {
		panic(err)
	}
	runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
		Verify: tea.String(string(ca)),
	}
	// Atau, abaikan sertifikat.
	//runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
	//	IgnoreSSL: tea.Bool(true),
	//}
	// Panggil API dekripsi untuk mendekripsi.
	decryptResponse, err := client.DecryptWithOptions(decryptRequest, runtimeOptions)
	if err != nil {
		panic(err)
	}

	// Plaintext data.
	_plaintext := decryptResponse.Plaintext

	fmt.Println("KeyId:", tea.StringValue(decryptResponse.KeyId))
	fmt.Println("Plaintext:", string(_plaintext))
	fmt.Println("RequestId:", tea.StringValue(decryptResponse.RequestId))

	return decryptResponse.Plaintext
}

// Buat objek Klien SDK instance KMS menggunakan konten ClientKey.
func getDkmsClientByClientKeyContent() *dedicatedkmssdk.Client {
	// Buat konfigurasi Klien SDK instance KMS
	config := &dedicatedkmsopenapi.Config{
	        // Setel protokol koneksi ke "https". Layanan instance KMS hanya mengizinkan akses melalui protokol HTTPS.
		Protocol: tea.String("https"),
		// Ganti dengan konten file ClientKey
		ClientKeyContent: tea.String("yourClientKeyContent"),
		// Ganti dengan kata sandi enkripsi yang dimasukkan saat membuat ClientKey
		Password: tea.String("yourClientKeyPassword"),
		// Setel endpoint ke <your KMS Instance Id>.cryptoservice.kms.aliyuncs.com.
		Endpoint: tea.String("yourEndpoint"),
	}
	// Buat objek Klien SDK instance KMS.
	client, err := dedicatedkmssdk.NewClient(config)
	if err != nil {
		// Tangani pengecualian
		panic(err)
	}
	return client
}

// Buat objek Klien SDK instance KMS menggunakan jalur file ClientKey.
func getDkmsClientByClientKeyFile() *dedicatedkmssdk.Client {
	// Buat konfigurasi Klien DKMS
	config := &dedicatedkmsopenapi.Config{
		// Setel protokol koneksi ke "https". Layanan instance KMS hanya mengizinkan akses melalui protokol HTTPS.
		Protocol: tea.String("https"),
		// Ganti dengan jalur file ClientKey
		ClientKeyFile: tea.String("yourClientKeyFile"),
		// Ganti dengan kata sandi enkripsi yang dimasukkan saat membuat ClientKey
		Password: tea.String("yourClientKeyPassword"),
                 // Setel endpoint ke <your KMS Instance Id>.cryptoservice.kms.aliyuncs.com.
		Endpoint: tea.String("yourEndpoint"),
	}
	// Buat objek Klien SDK instance KMS.
	client, err := dedicatedkmssdk.NewClient(config)
	if err != nil {
		// Tangani pengecualian.
		panic(err)
	}
	return client
}

Penjelasan contoh

Inisialisasi klien

Anda dapat membuat objek klien SDK instance KMS menggunakan konten ClientKey atau jalur file ClientKey.

import (
    dedicatedkmsopenapi "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/openapi"
    dedicatedkmssdk "github.com/aliyun/alibabacloud-dkms-gcs-go-sdk/sdk"
  "github.com/alibabacloud-go/tea/tea"
)

// Gunakan konten ClientKey untuk membuat objek klien SDK instance KMS.
func getDkmsClientByClientKeyContent() *dedicatedkmssdk.Client {
	// Buat konfigurasi klien SDK instance KMS.
	config := &dedicatedkmsopenapi.Config{
	        // Setel protokol koneksi ke "https". Layanan instance KMS hanya mengizinkan akses melalui protokol HTTPS.
		Protocol: tea.String("https"),
		// Ganti dengan konten file ClientKey.
		ClientKeyContent: tea.String("<CLIENT_KEY_CONTENT>"),
		// Ganti dengan kata sandi enkripsi yang dimasukkan saat membuat ClientKey.
		Password: tea.String("<CLIENT_KEY_PASSWORD>"),
		// Setel endpoint ke <KMS_INSTANCE_ID>.cryptoservice.kms.aliyuncs.com.
		Endpoint: tea.String("<ENDPOINT>"),
	}
	// Buat objek klien SDK instance KMS.
	client, err := dedicatedkmssdk.NewClient(config)
	if err != nil {
		// Penanganan abnormal.
		panic(err)
	}
	return client
}

// Gunakan jalur file ClientKey untuk membuat objek klien SDK instance KMS.
func getDkmsClientByClientKeyFile() *dedicatedkmssdk.Client {
	// Buat konfigurasi klien DKMS.
	config := &dedicatedkmsopenapi.Config{
		// Setel protokol koneksi ke "https". Layanan instance KMS hanya mengizinkan akses melalui protokol HTTPS.
		Protocol: tea.String("https"),
		// Ganti dengan jalur file ClientKey.
		ClientKeyFile: tea.String("<CLIENT_KEY_FILE>"),
		// Ganti dengan kata sandi enkripsi yang dimasukkan saat membuat ClientKey.
		Password: tea.String("<CLIENT_KEY_PASSWORD>"),
                 // Setel endpoint ke <KMS_INSTANCE_ID>.cryptoservice.kms.aliyuncs.com.
		Endpoint: tea.String("ENDPOINT"),
	}
	// Buat objek klien SDK instance KMS.
	client, err := dedicatedkmssdk.NewClient(config)
	if err != nil {
		// Penanganan abnormal.
		panic(err)
	}
	return client
}

Panggil API Encrypt untuk mengenkripsi data menggunakan kunci simetris

// Contoh enkripsi simetris.
func encryptSample(client *dedicatedkmssdk.Client, plaintext []byte, keyId string) *AesEncryptContext {
	encryptRequest := &dedicatedkmssdk.EncryptRequest{
		KeyId:     tea.String(keyId),
		Plaintext: plaintext,
	}
	// Verifikasi sertifikat server.
	ca, err := ioutil.ReadFile("path/to/caCert.pem")
	if err != nil {
		panic(err)
	}
	runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
		Verify: tea.String(string(ca)),
	}
	// Atau, abaikan sertifikat.
	//runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
	//	IgnoreSSL: tea.Bool(true),
	//}
	// Panggil API enkripsi untuk mengenkripsi.
	encryptResponse, err := client.EncryptWithOptions(encryptRequest, runtimeOptions)
	if err != nil {
		panic(err)
	}

	// ID Kunci.
	_keyId := tea.StringValue(encryptResponse.KeyId)
	// Saat kunci utama adalah kunci simetris, API dekripsi memerlukan Iv yang dikembalikan oleh enkripsi.
	_iv := encryptResponse.Iv
	// Ciphertext data.
	_cipher := encryptResponse.CiphertextBlob
	// Algoritma enkripsi.
	_algorithm := tea.StringValue(encryptResponse.Algorithm)

	fmt.Println("KeyId:", _keyId)
	fmt.Println("CiphertextBlob:", _cipher)
	fmt.Println("Iv:", _iv)
	fmt.Println("Algorithm:", _algorithm)
	fmt.Println("RequestId:", tea.StringValue(encryptResponse.RequestId))

	return &AesEncryptContext{
		KeyId:          _keyId,
		Iv:             _iv,
		CiphertextBlob: _cipher,
		Algorithm:      _algorithm,
	}
}

Panggil API Decrypt untuk mendekripsi ciphertext menggunakan kunci simetris

// Contoh dekripsi simetris.
func decryptSample(client *dedicatedkmssdk.Client, ctx *AesEncryptContext) []byte {
	decryptRequest := &dedicatedkmssdk.DecryptRequest{
		KeyId:          tea.String(ctx.KeyId),
		CiphertextBlob: ctx.CiphertextBlob, // Ciphertext data.
		Iv:             ctx.Iv,             // Iv yang dikembalikan oleh enkripsi.
		Algorithm:      tea.String(ctx.Algorithm),
	}
	// Verifikasi sertifikat server.
	ca, err := ioutil.ReadFile("path/to/caCert.pem")
	if err != nil {
		panic(err)
	}
	runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
		Verify: tea.String(string(ca)),
	}
	// Atau, abaikan sertifikat.
	//runtimeOptions := &dedicatedkmsopenapiutil.RuntimeOptions{
	//	IgnoreSSL: tea.Bool(true),
	//}
	// Panggil API dekripsi untuk mendekripsi.
	decryptResponse, err := client.DecryptWithOptions(decryptRequest, runtimeOptions)
	if err != nil {
		panic(err)
	}

	// Plaintext data.
	_plaintext := decryptResponse.Plaintext

	fmt.Println("KeyId:", tea.StringValue(decryptResponse.KeyId))
	fmt.Println("Plaintext:", string(_plaintext))
	fmt.Println("RequestId:", tea.StringValue(decryptResponse.RequestId))

	return decryptResponse.Plaintext
}