生成数据密钥

最近更新时间:2025-06-26 01:27:01

我的收藏

1. 接口描述

接口请求域名: kms.tencentcloudapi.com 。

本接口生成一个数据密钥,您可以用这个密钥进行本地数据的加密。

默认接口请求频率限制:100次/秒。

推荐使用 API Explorer
点击调试
API Explorer 提供了在线调用、签名验证、SDK 代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成 SDK 调用示例。

2. 输入参数

以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见 公共请求参数

参数名称 必选 类型 描述
Action String 公共参数,本接口取值:GenerateDataKey。
Version String 公共参数,本接口取值:2019-01-18。
Region String 公共参数,详见产品支持的 地域列表
KeyId String CMK全局唯一标识符
示例值:93866e69-9755-11ef-8e65-52540089bc41
KeySpec String 指定生成Datakey的加密算法以及Datakey大小,AES_128或者AES_256。KeySpec 和 NumberOfBytes 必须指定一个
示例值:AES_256
NumberOfBytes Integer 生成的DataKey的长度,同时指定NumberOfBytes和KeySpec时,以NumberOfBytes为准。最小值为1, 最大值为1024。KeySpec 和 NumberOfBytes 必须指定一个
示例值:32
EncryptionContext String key/value对的json字符串,如果使用该字段,则返回的DataKey在解密时需要填入相同的字符串
示例值:{"key1":"value1"}
EncryptionPublicKey String PEM 格式公钥字符串,支持 RSA2048 和 SM2 公钥,用于对返回数据中的 Plaintext 值进行加密。若为空,则不对 Plaintext 值加密。
示例值:-----BEGIN PUBLIC KEY----- MFkwEwY*fJiHQuh2Jr9lMspgK58UVMJTvQCAU+Hztyhd6Aw== -----END PUBLIC KEY-----
EncryptionAlgorithm String 非对称加密算法,配合 EncryptionPublicKey 对返回数据进行加密。目前支持:SM2(以 C1C3C2 格式返回密文),SM2_C1C3C2_ASN1 (以 C1C3C2 ASN1 格式返回密文),RSAES_PKCS1_V1_5,RSAES_OAEP_SHA_1,RSAES_OAEP_SHA_256。若为空,则默认为 SM2。
示例值:SM2
IsHostedByKms Integer 表示生成的数据密钥是否被KMS托管。1:表示被KMS托管保存,0:表示KMS不托管。表示生成的数据密钥是否被KMS托管。1:表示被KMS托管保存,0:表示KMS不托管。
示例值:0
DataKeyName String 数据密钥的名称,当IsHostedByKms为1时,必须填写。当IsHostedByKms为0时,可以不填,KMS不托管。
示例值:testdataKey
Description String 数据密钥 的描述,最大100字节
示例值:Description
HsmClusterId String KMS 独享版对应的 HSM 集群 ID。
当KeyId 没有传入时有效,如果指定HsmClusterId,会默认在此集群下生成根密钥,然后利用创建的根密钥产生数据密钥。
如果没有指定HsmClusterId,则会在公有云共享集群下创建一个根密钥,然后利用创建的根密钥产生数据密钥。
示例值:cluster-123

3. 输出参数

参数名称 类型 描述
KeyId String CMK的全局唯一标识
示例值:93866e69-9755-11ef-8e65-52540089bc41
Plaintext String 若调用时未提供 EncryptionPublicKey,该字段值为生成的数据密钥 DataKey 的 Base64 编码的明文,需进行 Base64 解码以获取 DataKey 明文。
若调用时提供了 EncryptionPublicKey,则该字段值为使用 EncryptionPublicKey 公钥进行非对称加密后的 Base64 编码的密文。需在 Base64 解码后,使用用户上传的公钥对应的私钥进行进一步解密,以获取 DataKey 明文。
示例值:q+EouJ/tGeiZIo9/tIl2baxQOBFxcN0PNn7F6EIEvpDR6kvQmHohD5PTbUCKPkct6K8jOiYpbuaWZthxco0phMRSE4+HpB17rX4jmlW8pw3eHWOZo8yRyq/c7RVVo0+DtZofszwhMirQyjcBTJWhLt7xywtE5zqhDjngeEktAEw=
CiphertextBlob String 数据密钥DataKey加密后的密文,用户需要自行保存该密文,KMS不托管用户的数据密钥。可以通过Decrypt接口从CiphertextBlob中获取数据密钥DataKey明文
示例值:GPJUsGlmPcSjHKIktXGyzn33yestz+7NteW36M6FuL8hPfJ1xVfdO6Akr8sF69x3yBXMwto4njumJMIsi9WKow==-k-XqqalxTyNKIC1rITRePFGQ==-k-xAL9z9eXIHV/p+WT1RsHP3dm6f43bkomXjwmvWdMXH+JQoFORTThfXgcRh1f9lPNLENK4+fCOiQVG1VvLdA0RvcuRvU=
DataKeyId String DataKey的全局唯一标识,当KMS托管数据密钥时返回。
示例值:93866e69-9755-11ef-8e65-52540089547t
RequestId String 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。

4. 示例

示例1 生成数据密钥示例

使用指定的CMK生成Datakey。

输入示例

POST / HTTP/1.1
Host: kms.tencentcloudapi.com
Content-Type: application/json
X-TC-Action: GenerateDataKey
<公共请求参数>

{
    "KeyId": "93866e69-9755-11ef-8e65-52540089bc41",
    "KeySpec": "AES_256",
    "NumberOfBytes": 32,
    "EncryptionContext": "{\"key1\":\"value1\"}",
    "EncryptionPublicKey": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoEcz****srLVydfJiHQuh2Jr9lMspgK58UVMJTvQCAU+Hztyhd6Aw==\n-----END PUBLIC KEY-----",
    "EncryptionAlgorithm": "SM2"
}

输出示例

{
    "Response": {
        "CiphertextBlob": "GPJUsGlmPcSjHKIktXGyzn33yestz+7NteW36M6FuL8hPfJ1xVfdO6Akr8sF69x3yBXMwto4njumJMIsi9WKow==-k-XqqalxTyNKIC1rITRePFGQ==-k-xAL9z9eXIHV/p+WT1RsHP3dm6f43bkomXjwmvWdMXH+JQoFORTThfXgcRh1f9lPNLENK4+fCOiQVG1VvLdA0RvcuRvU=",
        "KeyId": "93866e69-9755-11ef-8e65-52540089bc41",
        "Plaintext": "q+EouJ/tGeiZIo9/tIl2baxQOBFxcN0PNn7F6EIEvpDR6kvQmHohD5PTbUCKPkct6K8jOiYpbuaWZthxco0phMRSE4+HpB17rX4jmlW8pw3eHWOZo8yRyq/c7RVVo0+DtZofszwhMirQyjcBTJWhLt7xywtE5zqhDjngeEktAEw=",
        "RequestId": "044e823a-7a0c-4603-b03c-e99be5df998d"
    }
}

5. 开发者资源

腾讯云 API 平台

腾讯云 API 平台 是综合 API 文档、错误码、API Explorer 及 SDK 等资源的统一查询平台,方便您从同一入口查询及使用腾讯云提供的所有 API 服务。

API Inspector

用户可通过 API Inspector 查看控制台每一步操作关联的 API 调用情况,并自动生成各语言版本的 API 代码,也可前往 API Explorer 进行在线调试。

SDK

云 API 3.0 提供了配套的开发工具集(SDK),支持多种编程语言,能更方便的调用 API。

命令行工具

6. 错误码

以下仅列出了接口业务逻辑相关的错误码,其他错误码详见 公共错误码

错误码 描述
FailedOperation.EncryptionError 加密操作失败。
InternalError 内部错误。
InvalidParameter 参数错误。
InvalidParameterValue.DataKeyNameAlreadyExists 数据密钥名称已存在
InvalidParameterValue.InvalidDataKeyName 不合法的数据密钥名称
InvalidParameterValue.InvalidHsmClusterId 无效的 HSM 集群 ID。
InvalidParameterValue.InvalidKeyId KeyId不合法。
InvalidParameterValue.InvalidKeyUsage KeyUsage参数错误。
InvalidParameterValue.InvalidType Type参数错误。
LimitExceeded.CmkLimitExceeded CMK数量已达上限。
LimitExceeded.DataKeyLimitExceeded DataKey超过上限
ResourceUnavailable.CmkDisabled CMK已被禁用。
ResourceUnavailable.CmkNotFound CMK不存在。
ResourceUnavailable.KeyPendingDelete 不可用密钥:密钥待删除。
UnauthorizedOperation 未授权操作。