全部产品
Search
文档中心

:Memulai dengan Encryption SDK untuk Python

更新时间:Jul 02, 2025

Encryption SDK adalah pustaka enkripsi sisi klien yang digunakan bersama dengan Key Management Service (KMS) untuk mengenkripsi dan mendekripsi data, serta menandatangani data dan memverifikasi tanda tangan. Topik ini menjelaskan cara menggunakan Encryption SDK untuk Python 3 dalam mengenkripsi dan mendekripsi data.

Informasi latar belakang

Untuk informasi lebih lanjut tentang kode contoh Encryption SDK untuk Python, kunjungi alibabacloud-encryption-sdk-python.

Catatan

Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua Operasi API. Menggunakan pasangan AccessKey untuk melakukan operasi merupakan operasi berisiko tinggi. Kami merekomendasikan Anda menggunakan pengguna RAM untuk memanggil Operasi API atau melakukan operasi pemeliharaan rutin. Hindari menyimpan ID AccessKey dan Rahasia AccessKey di dalam kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya yang dimiliki oleh akun Anda dapat terganggu.

Dalam contoh ini, pasangan AccessKey disimpan dalam variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET untuk mengimplementasikan otentikasi identitas.

Instal Encryption SDK pada mesin lokal Anda

  1. Instal Encryption SDK.

    git clone https://github.com/aliyun/alibabacloud-encryption-sdk-python.git
    cd alibabacloud-encryption-sdk-python
    python setup.py install
  2. Periksa versi Encryption SDK.

    1. Jalankan perintah berikut untuk masuk ke lingkungan Python:

      python
    2. Jalankan perintah berikut untuk memeriksa versi Encryption SDK:

      import aliyun_encryption_sdk
      aliyun_encryption_sdk.__version__

      Setelah Anda menjalankan perintah tersebut, nomor versi '0.1.1' akan ditampilkan di konsol Python.

Enkripsi dan dekripsi data tipe larik byte

# -*- coding: UTF-8 -*-
"""Contoh menunjukkan enkripsi dan dekripsi dasar."""

import base64
import os

from aliyun_encryption_sdk.cache.local import LocalDataKeyMaterialCache
from aliyun_encryption_sdk.ckm.cache import CachingCryptoKeyManager
from aliyun_encryption_sdk.client import AliyunCrypto
from aliyun_encryption_sdk.kms import AliyunConfig
from aliyun_encryption_sdk.provider.default import DefaultDataKeyProvider


def build_aliyun_crypto(cache=False):
    config = AliyunConfig(ACCESS_KEY_ID, ACCESS_KEY_SECRET)
    client = AliyunCrypto(config)
    if cache:
        client.crypto_key_manager = CachingCryptoKeyManager(LocalDataKeyMaterialCache(), 5)
    return client


def encrypt_sample():
    print("Teks biasa: " + PLAIN_TEXT)
    provider = DefaultDataKeyProvider(AES_KEY_ARN)
    client = build_aliyun_crypto(False)
    cipher_text, enc_material = client.encrypt(provider, PLAIN_TEXT.encode("utf-8"), ENCRYPTION_CONTEXT)
    cipher_text_str = base64.standard_b64encode(cipher_text).decode("utf-8")
    print(u"Teks terenkripsi: " + cipher_text_str)
    return cipher_text_str


def decrypt_sample(cipher_text):
    cipher_text_bytes = base64.standard_b64decode(cipher_text.encode("utf-8"))
    provider = DefaultDataKeyProvider(AES_KEY_ARN)
    client = build_aliyun_crypto(False)
    plain_text, dec_material = client.decrypt(provider, cipher_text_bytes)
    print(u"Hasil dekripsi: " + bytes.decode(plain_text))
    return plain_text


if __name__ == '__main__':
    PLAIN_TEXT = "some plaintext"
    ACCESS_KEY_ID = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
    ACCESS_KEY_SECRET = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
    AES_KEY_ARN = os.getenv("AES_KEY_ARN")
    ENCRYPTION_CONTEXT = {
        "this": "context",
        "can help you": "to confirm",
        "this data": "is your original data"
    }
    cipherText = encrypt_sample()
    decrypt_sample(cipherText)

Enkripsi dan dekripsi data tipe aliran byte

# -*- coding: UTF-8 -*-
"""Contoh menunjukkan enkripsi dan dekripsi dasar."""

import os

from aliyun_encryption_sdk.cache.local import LocalDataKeyMaterialCache
from aliyun_encryption_sdk.ckm.cache import CachingCryptoKeyManager
from aliyun_encryption_sdk.client import AliyunCrypto
from aliyun_encryption_sdk.kms import AliyunConfig
from aliyun_encryption_sdk.provider.default import DefaultDataKeyProvider


def build_aliyun_crypto(cache=False):
    config = AliyunConfig(ACCESS_KEY_ID, ACCESS_KEY_SECRET)
    client = AliyunCrypto(config)
    if cache:
        client.crypto_key_manager = CachingCryptoKeyManager(LocalDataKeyMaterialCache(), 5)
    return client


def file_stream_sample():
    origin_file_path = r"some_file"
    encrypted_file_path = r"enc_file"
    decrypted_file_path = r"dec_file"
    provider = DefaultDataKeyProvider(AES_KEY_ARN)
    client = build_aliyun_crypto()
    with open(origin_file_path, "rb") as f, open(encryped_file_path, "wb") as cipher_text:
        encrypted_stream, _ = client.encrypt_stream(provider, f)
        with encrypted_stream as stream:
            for content in stream:
                cipher_text.write(content)

    with open(encryped_file_path, "rb") as f, open(decrypted_file_path, "wb") as plain_text:
        decrypted_stream, _ = client.decrypt_stream(provider, f)
        with decrypted_stream as stream:
            for content in stream:
                plain_text.write(content)


if __name__ == '__main__':
    ACCESS_KEY_ID = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
    ACCESS_KEY_SECRET = os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
    AES_KEY_ARN = os.getenv("AES_KEY_ARN")
    file_stream_sample()