KMS实例SDK for C#
KMS实例SDK for C#帮助您通过简单的编程访问KMS实例API,实现加密解密、签名验签和获取凭据值的业务诉求。本文介绍如何安装SDK以及如何调用接口进行加密解密、签名验签和获取凭据值。
背景信息
KMS提供了多种类型的开发工具(SDK),请您在使用前先了解各SDK的使用场景。更多信息,请参见SDK参考。
您可以访问开源代码仓库,查看SDK源码及代码示例。
前提条件
已购买和启用KMS实例。具体操作,请参见购买和启用KMS实例。
已完成密钥和凭据的创建。具体操作,请参见软件密钥、硬件密钥、创建凭据。
说明如果您的业务不涉及凭据,则无需创建凭据。
已创建应用接入点并保存了Client Key、获取KMS实例CA证书。具体操作,请参见通过应用接入点访问KMS实例。
请确保应用程序运行环境可访问KMS实例VPC地址。
业务场景
说明
应用程序运行环境和KMS实例在同一个地域,且属于同一个VPC
默认应用程序运行环境和KMS实例间网络互通,您无需配置。
应用程序运行环境和KMS实例在同一个地域,但属于不同VPC
您需要配置多个VPC访问同一个KMS实例,具体操作,请参见同地域多VPC访问KMS实例。
应用程序运行环境和KMS实例在不同地域
您需要配置应用跨地域访问KMS实例。具体操作,请参见应用跨地域访问KMS实例。
安装SDK
使用.Net CLI安装SDK。
dotnet add package AlibabaCloud.Dkms.Gcs.Sdk
建议您安装SDK的最新版本,关于版本的更多信息,请参见开源代码仓库。
初始化SDK
使用C# SDK发起KMS实例API请求,您需要初始化一个Client实例。
using System;
AlibabaCloud.Dkms.Gcs.OpenApi.Models.Config config = new AlibabaCloud.Dkms.Gcs.OpenApi.Models.Config
{
ClientKeyFile = "your client key file path",
Password = Environment.GetEnvironmentVariable("your client key password"),
Endpoint = "<your KMS Instance Id>.cryptoservice.kms.aliyuncs.com",
CaFilePath = "path/to/DKMSInstanceCACertificates"
};
var client = new AlibabaCloud.Dkms.Gcs.Sdk.Client(config);
使用已初始化的客户端调用KMS实例API
初始化Client后,您可以通过Client调用KMS实例API,本文介绍如下使用场景和代码示例。关于KMS实例API的详细信息,请参见API概览。
调用Encrypt接口使用对称密钥加密数据
详细代码示例,请参见原始代码。
//密钥的ID或别名(Alias)。 string keyId = "your-keyId"; //待加密数据。 byte[] plaintext = your-plaintext; AlibabaCloud.Dkms.Gcs.Sdk.Models.EncryptRequest request = new AlibabaCloud.Dkms.Gcs.Sdk.Models.EncryptRequest { Plaintext = plaintext, KeyId = keyId, }; var encryptResponse = client.Encrypt(request); //加密数据。 byte[] cipherData = encryptResponse.CiphertextBlob; //Cipher初始向量,用于解密数据。 byte[] iv = encryptResponse.Iv; //请求ID。 string requestId = encryptResponse.RequestId;
调用Decrypt接口使用对称密钥解密密文
详细代码示例,请参见原始代码。
//密钥的ID或别名(Alias)。 string keyId = "your-keyId"; byte[] ciphertextBlob = your-ciphertextBlob; byte[] iv = your-iv; AlibabaCloud.Dkms.Gcs.Sdk.Models.DecryptRequest request = new AlibabaCloud.Dkms.Gcs.Sdk.Models.DecryptRequest { KeyId = keyId, CiphertextBlob = ciphertextBlob, Iv = iv, }; var decryptResponse = client.Decrypt(request); //原始数据。 byte[] plaintext = decryptResponse.Plaintext; //请求ID。 string requestId = decryptResponse.RequestId;
调用Sign接口使用非对称密钥进行数字签名
详细代码示例,请参见原始代码。
//密钥的ID或别名(Alias)。 string keyId = "your-keyId"; //待签名数据。 byte[] message = your-message ; AlibabaCloud.Dkms.Gcs.Sdk.Models.SignRequest request = new AlibabaCloud.Dkms.Gcs.Sdk.Models.SignRequest { KeyId = keyId, Message = message, }; var signResponse = client.Sign(request); //签名值。 byte[] signature = signResponse.Signature; //请求ID。 string requestId = signResponse.RequestId;
调用Verify接口使用非对称密钥验证数字签名
详细代码示例,请参见原始代码。
//密钥的ID或别名(Alias)。 string keyId = "your-keyId"; //待签名数据。 byte[] message = your - message; //签名数据。 byte[] signature = your - signature; AlibabaCloud.Dkms.Gcs.Sdk.Models.VerifyRequest request = new AlibabaCloud.Dkms.Gcs.Sdk.Models.VerifyRequest { KeyId = keyId, Message = message, Signature = signature, }; var verifyResponse = client.Verify(request); //验签结果。 bool? value = verifyResponse.Value; //请求ID。 string requestId = verifyResponse.RequestId;
调用GetSecretValue接口获取凭据值
详细代码示例,请参见原始代码。
//KMS的凭据名称。 string secretName = "your-secret-name"; AlibabaCloud.Dkms.Gcs.Sdk.Models.GetSecretValueRequest request = new AlibabaCloud.Dkms.Gcs.Sdk.Models.GetSecretValueRequest { SecretName = secretName, }; var getSecretValueResponse = client.GetSecretValue(request); //凭据值 string secretData = getSecretValueResponse.SecretData; //请求ID。 string requestId = getSecretValueResponse.RequestId;