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.
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.
Untuk informasi lebih lanjut tentang cara mengonfigurasi informasi autentikasi, lihat Kelola Kredensial Akses.
Metode yang digunakan untuk mengonfigurasi variabel lingkungan bervariasi berdasarkan sistem operasi. Untuk informasi lebih lanjut, lihat Konfigurasikan Variabel Lingkungan di Linux, macOS, dan Windows.
Instal Encryption SDK pada mesin lokal Anda
Instal Encryption SDK.
git clone https://github.com/aliyun/alibabacloud-encryption-sdk-python.git cd alibabacloud-encryption-sdk-python python setup.py installPeriksa versi Encryption SDK.
Jalankan perintah berikut untuk masuk ke lingkungan Python:
pythonJalankan 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()