Mengenkripsi dan mendekripsi data dengan kunci simetris

Halaman ini menunjukkan cara menggunakan Cloud Key Management Service (Cloud KMS) untuk melakukan operasi kunci simetris berikut:

  • Enkripsi konten teks atau biner (plaintext) menggunakan kunci Cloud KMS.
  • Mendekripsi ciphertext yang dienkripsi dengan kunci Cloud KMS.

Jika Anda ingin menggunakan kunci asimetris untuk enkripsi, lihat Mengenkripsi dan mendekripsi data dengan kunci asimetris. Untuk mempelajari enkripsi simetris mentah, lihat enkripsi simetris mentah.

Sebelum memulai

  1. Buat key ring dan buat kunci.

  2. Pastikan pengguna yang memanggil metode enkripsi dan dekripsi memiliki izin cloudkms.cryptoKeyVersions.useToEncrypt dan cloudkms.cryptoKeyVersions.useToDecrypt pada kunci.

    Salah satu cara untuk mengizinkan pengguna mengenkripsi atau mendekripsi adalah dengan menambahkan pengguna ke peran IAM roles/cloudkms.cryptoKeyEncrypter, roles/cloudkms.cryptoKeyDecrypter, atau roles/cloudkms.cryptoKeyEncrypterDecrypter untuk kunci tersebut. Peran roles/cloudkms.admin tidak memberikan kedua izin ini. Untuk mengetahui informasi selengkapnya, lihat Izin dan Peran.

Enkripsi

gcloud

Untuk menggunakan Cloud KMS di command line, Instal atau upgrade ke versi terbaru Google Cloud CLI terlebih dahulu.

gcloud kms encrypt \
    --key KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION  \
    --plaintext-file FILE_TO_ENCRYPT \
    --ciphertext-file ENCRYPTED_OUTPUT

Ganti kode berikut:

  • KEY_NAME: nama kunci yang ingin Anda gunakan untuk enkripsi.
  • KEY_RING: nama key ring yang berisi kunci.
  • LOCATION: lokasi Cloud KMS yang berisi key ring.
  • FILE_TO_ENCRYPT: jalur ke file yang ingin Anda enkripsi.
  • ENCRYPTED_OUTPUT: jalur tempat Anda ingin menyimpan output terenkripsi.

Untuk mengetahui informasi tentang semua flag dan kemungkinan nilai, jalankan perintah dengan flag --help.

C#

Untuk menjalankan kode ini, siapkan lingkungan pengembangan C# terlebih dahulu dan instal SDK C# Cloud KMS.


using Google.Cloud.Kms.V1;
using Google.Protobuf;
using System.Text;

public class EncryptSymmetricSample
{
    public byte[] EncryptSymmetric(
      string projectId = "my-project", string locationId = "us-east1", string keyRingId = "my-key-ring", string keyId = "my-key",
      string message = "Sample message")
    {
        // Create the client.
        KeyManagementServiceClient client = KeyManagementServiceClient.Create();

        // Build the key name.
        CryptoKeyName keyName = new CryptoKeyName(projectId, locationId, keyRingId, keyId);

        // Convert the message into bytes. Cryptographic plaintexts and
        // ciphertexts are always byte arrays.
        byte[] plaintext = Encoding.UTF8.GetBytes(message);

        // Call the API.
        EncryptResponse result = client.Encrypt(keyName, ByteString.CopyFrom(plaintext));

        // Return the ciphertext.
        return result.Ciphertext.ToByteArray();
    }
}

Go

Untuk menjalankan kode ini, siapkan lingkungan pengembangan Go terlebih dahulu dan instal Cloud KMS Go SDK.

import (
	"context"
	"fmt"
	"hash/crc32"
	"io"

	kms "cloud.google.com/go/kms/apiv1"
	"cloud.google.com/go/kms/apiv1/kmspb"
	"google.golang.org/protobuf/types/known/wrapperspb"
)

// encryptSymmetric encrypts the input plaintext with the specified symmetric
// Cloud KMS key.
func encryptSymmetric(w io.Writer, name string, message string) error {
	// name := "projects/my-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key"
	// message := "Sample message"

	// Create the client.
	ctx := context.Background()
	client, err