用于生成數據密鑰,對數據按照KMS信封加密方式加密。
使用說明
概述
本接口通過隨機數生成器產生數據密鑰,使用KMS密鑰的主版本對數據密鑰加密,并返回數據密鑰的明文和密文。您可以使用返回的數據密鑰明文(Plaintext),在KMS之外對數據進行加密。請保存數據密鑰密文和認證數據(Aad),以便后續對數據進行解密。
對數據密鑰加密時僅支持GCM加密模式。
數據密鑰內容由KMS通過高質量的隨機數生成器產生,與加密它的KMS密鑰材料內容無關。
和GenerateDataKey的區別
AdvanceGenerateDataKey和GenerateDataKey都用于生成數據密鑰,區別為:
AdvanceGenerateDataKey:加密時使用密鑰的主版本,加密后您需要存儲數據密鑰密文(CiphertextBlob)和認證數據(Aad),然后使用AdvanceDecrypt解密。
GenerateDataKey:加密時使用密鑰的初始版本,加密后您需要存儲數據密鑰密文(CiphertextBlob)、初始向量(Iv)、加密算法(Algorithm)和認證數據(Aad),然后使用Decrypt或AdvanceDecrypt解密。
如果密鑰開啟了自動輪轉,生成數據密鑰時請使用AdvanceGenerateDataKey,以避免輪轉功能不生效。關于密鑰輪轉的相關內容,請參見密鑰輪轉。
使用限制
僅當密鑰為KMS軟件密鑰管理實例中的對稱密鑰時,支持使用本接口。關于密鑰規格以及加密模式的詳細信息,請參見密鑰管理類型和密鑰規格。
請求參數
名稱 | 類型 | 是否必選 | 示例值 | 描述 |
KeyId | string | 是 | key-hzz62f1cb66fa42qo**** | 密鑰的全局唯一標識符。該參數也可以被指定為密鑰別名。 重要 密鑰必須為KMS軟件密鑰管理實例中的對稱密鑰。 |
NumberOfBytes | int | 是 | 32 | 生成的數據密鑰的長度。 |
Aad | binary | 否 | 二進制數據 | 對數據密鑰加密時使用的GCM加密模式認證數據。 重要 如果指定了該參數,調用AdvanceDecrypt解密時需要指定相同的參數。 |
響應數據
名稱 | 類型 | 示例值 | 描述 |
CiphertextBlob | bytes | 二進制密文 | 數據密鑰密文。 說明 CiphertextBlob中還包含密鑰標識(KeyId)、加密算法(Algorithm)、加密數據時使用的初始向量(Iv)等信息,通過AdvanceDecrypt解密時僅需傳入CiphertextBlob、認證數據(Aad)。 |
Plaintext | bytes | 二進制明文 | 數據密鑰明文。 |
KeyId | string | key-hzz62f1cb66fa42qo**** | 密鑰的全局唯一標識符。如果請求中的KeyId參數使用的是密鑰別名,在響應中會返回對應密鑰的全局唯一標識符。 |
KeyVersionId | string | key-hzz62f1cb66fa42qo****-17kedv**** | 加密數據密鑰的密鑰版本標志符。 |
Algorithm | string | AES_GCM | 加密算法。 |
Iv | bytes | 二進制數據 | 加密數據密鑰時使用的初始向量。 |
RequestId | string | c0065a6d-7784-4ef2-a692-288fdcbc7b9d | 本次調用請求的ID,是由阿里云為該請求生成的唯一標識符,可用于排查和定位問題。 |
錯誤碼
HTTP狀態碼 | 錯誤碼 | 錯誤消息 | 描述 |
404 | Forbidden.OnlySymmetricKeySupported | The key %s is not a symmetric key. The API only supports symmetric keys. | 僅支持使用對稱密鑰。 |
訪問公共錯誤碼查看更多錯誤碼。