小数据加解密-使用用户主密钥(CMK)进行字符串加解密
引导式阅读
Python
小数据加解密-使用用户主密钥(CMK)进行字符串加解密
作者
c***r
上架时间
2024-01-11 11:32:20

1、介绍

什么是密钥管理服务?

密钥管理服务,密钥管理,即密钥管理服务(Key Management Service,KMS),是一种安全、可靠、简单易用的密钥托管服务,帮助您轻松创建和管理密钥,保护密钥的安全。KMS通过使用硬件安全模块(Hardware Security Module,HSM)保护密钥安全,帮助用户轻松创建和管理密钥,所有的用户密钥都由HSM中的根密钥保护,避免密钥泄露。 当有大量数据(例如:照片、视频或者数据库文件等)需要加解密时,用户可采用信封加密方式加解密数据,无需通过网络传输大量数据即可完成数据加解密。

您将学到什么?

如何通过Python版本的KMS SDK方式使用用户主密钥(CMK)进行字符串加解密

2、前置条件

  • 1、获取华为云开发工具包(SDK),您也可以查看安装Python SDK。
  • 2、您需要拥有华为云租户账号以及该账号对应的 Access Key(AK)和 Secret Access Key(SK)请在华为云控制台“我的凭证 > 访问密钥”页面上创建和查看您的AK/SK。具体请参见 访问密钥
  • 3、- 华为云 Python SDK 支持 python3.3以上 的版本。可执行 python --version 检查当前 python 的版本信息。
  • 4、用户需要在密钥管理控制台创建用户主密钥,算法为AES_256。

3、SDK获取和安装

您可以通过pip安装SDK依赖包

pip install huaweicloudsdkcore pip install huaweicloudsdkkms

4、接口参数说明

关于接口参数的详细说明可参见:

a.加密数据

b.解密数据

5、代码示例

如何通过Python版本的KMS SDK方式使用用户主密钥(CMK)进行字符串加解密

from huaweicloudsdkcore.auth.credentials import BasicCredentials from huaweicloudsdkcore.region.region import Region as coreRegion from huaweicloudsdkcore.http.http_config import HttpConfig from huaweicloudsdkkms.v2 import KmsClient from huaweicloudsdkkms.v2 import EncryptDataRequest from huaweicloudsdkkms.v2 import EncryptDataRequestBody from huaweicloudsdkkms.v2 import DecryptDatakeyRequest from huaweicloudsdkkms.v2 import DecryptDatakeyRequestBody # 测试数据 __PLAIN_TEXT = "Hello World!" if __name__ == "__main__": """ 基础认证信息: 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量 - access_key: 华为云账号Access Key - secret_key: 华为云账号Secret Key, 敏感信息,建议密文存储 - iam_endpoint: 华为云IAM服务访问终端地址,详情见https://developer.huaweicloud.com/endpoint?IAM - kms_region_id: 华为云KMS支持的地域,详情见https://developer.huaweicloud.com/endpoint?DEW - kms_endpoint: 华为云KMS服务访问终端地址,详情见https://developer.huaweicloud.com/endpoint?DEW """ access_key = os.environ["HUAWEICLOUD_SDK_AK"] secret_key = os.environ["HUAWEICLOUD_SDK_SK"] iam_endpoint = "https://<IamEndpoint>" kms_region_id = "<RegionId>" kms_endpoint = "https://<KmsEndpoint>" # 用户主密钥ID KEY_ID = "xxxxxxxx-xxx-xxx-xxxx-xxxxxxxxxxxx" # 1.准备认证信息 credentials = BasicCredentials(access_key, secret_key).with_iam_endpoint(iam_endpoint) # 配置请求属性 http_config = HttpConfig.get_default_config() http_config.ignore_ssl_verification = True http_config.timeout = (60, 120) # 2.初始化SDK,传入认证信息与KMS的终端信息 client = KmsClient.new_builder().with_credentials(credentials) \ .with_region(coreRegion(id=kms_region_id, endpoint=kms_endpoint)) \ .with_http_config(http_config).build() # 3.加密数据 encrypt_data_request = EncryptDataRequest(body=EncryptDataRequestBody(key_id=KEY_ID, plain_text=__PLAIN_TEXT)) encrypt_data_response = client.encrypt_data(request=encrypt_data_request) # 4.解密数据 decrypt_data_request = DecryptDatakeyRequest( body=DecryptDatakeyRequestBody(key_id=KEY_ID, cipher_text=encrypt_data_response.cipher_text)) decrypt_data_response = client.decrypt_data(request=decrypt_data_request) # 5.比对加密后再解密结果 if __PLAIN_TEXT != decrypt_data_response.plain_text: raise Exception("test case failed")

6、修订记录

发布日期 文档版本 修订说明
2023-09-11 1.0 文档首次发布