KMS实例SDK for C#

更新时间: 2023-11-21 17:02:22

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;

相关文档

阿里云首页 密钥管理服务 相关技术圈