该操作指南以 Python 为例,其它编程语言类似。
前期准备
示例代码依赖环境:Python 2.7。
KMS 产品服务开通:从 腾讯云控制台 开通 KMS 产品。
云 API 密钥服务开通:获取 SecretID、SecretKey 以及调用地址(endpoint),endpoint 一般形式为
*.tencentcloudapi.com
,例如 KMS 的调用地址为kms.tencentcloudapi.com
,具体参考各产品说明。SDK 安装,执行以下命令,详细可参见 tencentcloud-sdk-python github 项目。
pip install tencentcloud-sdk-python
操作流程
您可以通过以下4个步骤完成敏感数据加密的操作。
1. 通过控制台 Console 或 API(CreateKey)创建一个用户主密钥 CMK,即创建用户主密钥 CMK。
2. 通过 API 调用 KMS 加密接口(Encrypt)将用户敏感数据进行加密,获取密文。
3. 根据业务需求将密文数据存储。
4. 读取数据时,通过 API 调用 KMS 解密接口(Decrypt)解密成明文。
操作步骤
步骤1:创建用户主密钥 CMK
步骤2:敏感信息加密
前提条件
确保步骤1创建的用户主密钥为启用状态。
控制台方式
Python SDK 方式
通过 Encrypt 来针对用户的数据进行加密,用于加密的数据大小最多为4KB任意数据,可用于加密数据库密码,RSA Key,或其它较小的敏感信息。本文示例使用腾讯云 Python SDK 实现,您也可以使用其它支持的编程语言。
加密 Python SDK 示例
以下示例代码展示了如何使用指定 CMK 对数据进行加密操作。
Python 代码示例
# -*- coding: utf-8 -*-import base64import osfrom tencentcloud.common import credentialfrom tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKExceptionfrom tencentcloud.common.profile.client_profile import ClientProfilefrom tencentcloud.common.profile.http_profile import HttpProfilefrom tencentcloud.kms.v20190118 import kms_client, modelsdef KmsInit(region="ap-guangzhou", secretId="", secretKey=""):try:credProfile = credential.Credential(secretId, secretKey)client = kms_client.KmsClient(credProfile, region)return clientexcept TencentCloudSDKException as err:print(err)return Nonedef Encrypt(client, keyId="", plaintext=""):try:req = models.EncryptRequest()req.KeyId = keyIdreq.Plaintext = base64.b64encode(plaintext)rsp = client.Encrypt(req) # 调用加密接口return rspexcept TencentCloudSDKException as err:print(err)return Noneif __name__ == '__main__':# 用户自定义参数secretId = os.getenv('SECRET_ID') # read from environment variable or use whitebox encryption to protect secret IDsecretKey = os.getenv('SECRET_KEY') # read from environment variable or use whitebox encryption to protect secret key region = "ap-guangzhou"region = "ap-guangzhou"keyId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"plaintext = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"client = KmsInit(region, secretId, secretKey)rsp = Encrypt(client, keyId, plaintext)print "plaintext=", plaintext, ", cipher=", rsp.CiphertextBlob
步骤3:将加密后的数据存储
根据业务的应用场景,将密文进行存储。
步骤4:敏感数据解密
控制台方式
Python SDK 方式
通过 Decrypt 来针对用户的数据进行解密。
Python 代码示例
# -*- coding: utf-8 -*-import base64import osfrom tencentcloud.common import credentialfrom tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKExceptionfrom tencentcloud.common.profile.client_profile import ClientProfilefrom tencentcloud.common.profile.http_profile import HttpProfilefrom tencentcloud.kms.v20190118 import kms_client, modelsdef KmsInit(region="ap-guangzhou", secretId="", secretKey=""):try:credProfile = credential.Credential(secretId, secretKey)client = kms_client.KmsClient(credProfile, region)return clientexcept TencentCloudSDKException as err:print(err)return Nonedef Decrypt(client, keyId="", ciphertextBlob=""):try:req = models.DecryptRequest()req.CiphertextBlob = ciphertextBlobrsp = client.Decrypt(req) # 调用解密接口return rspexcept TencentCloudSDKException as err:print(err)return Noneif __name__ == '__main__':# 用户自定义参数secretId = os.getenv('SECRET_ID') # read from environment variable or use whitebox encryption to protect secret IDsecretKey = os.getenv('SECRET_KEY') # read from environment variable or use whitebox encryption to protect secret key region = "ap-guangzhou"region = "ap-guangzhou"keyId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"ciphertextBlob = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"client = KmsInit(region, secretId, secretKey)rsp = Decrypt(client, keyId, ciphertextBlob)print "cipher=", ciphertextBlob, ", base64 decoded plaintext=", base64.b64decode(rsp.Plaintext)