tencent cloud

文档反馈

操作指南

最后更新时间:2024-01-11 16:31:21
    该操作指南以 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 实现,您也可以使用其它支持的编程语言。
    该 API 操作的 KeyId 和 Plaintext 为必选参数,详情请参见 Encrypt 接口文档来查看其它参数说明。

    加密 Python SDK 示例

    以下示例代码展示了如何使用指定 CMK 对数据进行加密操作。

    Python 代码示例

    # -*- coding: utf-8 -*-
    import base64
    
    from tencentcloud.common import credential
    from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
    from tencentcloud.common.profile.client_profile import ClientProfile
    from tencentcloud.common.profile.http_profile import HttpProfile
    from tencentcloud.kms.v20190118 import kms_client, models
    
    def KmsInit(region="ap-guangzhou", secretId="", secretKey=""):
    try:
    credProfile = credential.Credential(secretId, secretKey)
    client = kms_client.KmsClient(credProfile, region)
    return client
    except TencentCloudSDKException as err:
    print(err)
    return None
    
    def Encrypt(client, keyId="", plaintext=""):
    try:
    req = models.EncryptRequest()
    req.KeyId = keyId
    req.Plaintext = base64.b64encode(plaintext)
    rsp = client.Encrypt(req) # 调用加密接口
    return rsp
    except TencentCloudSDKException as err:
    print(err)
    return None
    
    if __name__ == '__main__':
    # 用户自定义参数
    secretId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    secretKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    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 来针对用户的数据进行解密。
    该 API 操作的 CiphertextBlob 为必选参数,详情请参见 Decrypt 接口文档查看其它参数说明。

    Python 代码示例

    # -*- coding: utf-8 -*-
    import base64
    from tencentcloud.common import credential
    from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
    from tencentcloud.common.profile.client_profile import ClientProfile
    from tencentcloud.common.profile.http_profile import HttpProfile
    from tencentcloud.kms.v20190118 import kms_client, models
    
    def KmsInit(region="ap-guangzhou", secretId="", secretKey=""):
    try:
    credProfile = credential.Credential(secretId, secretKey)
    client = kms_client.KmsClient(credProfile, region)
    return client
    except TencentCloudSDKException as err:
    print(err)
    return None
    
    def Decrypt(client, keyId="", ciphertextBlob=""):
    try:
    req = models.DecryptRequest()
    req.CiphertextBlob = ciphertextBlob
    rsp = client.Decrypt(req) # 调用解密接口
    return rsp
    except TencentCloudSDKException as err:
    print(err)
    return None
    
    if __name__ == '__main__':
    # 用户自定义参数
    secretId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    secretKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    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)
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持