tencent cloud

密钥管理系统

产品简介
产品概述
产品优势
应用场景
基本概念
购买指南
计费概述
购买方式
续费说明
欠费说明
控制台指南
入门概述
密钥管理
访问控制
审计
TCCLI 管理指南
操作总览
创建密钥
查看密钥
编辑密钥
启用禁用密钥
密钥轮换
对称密钥加解密
非对称密钥解密
删除密钥
实践教程
对称加解密
非对称加解密
KMS 后量子密码实践
外部密钥导入
指数回退策略应对服务限频
云产品集成 KMS 实现透明加密
API 文档
History
Introduction
API Category
Key APIs
Making API Requests
Asymmetric Key APIs
Data Types
Error Codes
服务等级协议
常见问题
一般性问题
开发接入相关问题
KMS 政策
隐私政策
数据处理和安全协议
联系我们
词汇表

操作指南

PDF
聚焦模式
字号
最后更新时间: 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)


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈