我正在尝试使用 KMS GenerateDataKeyPairAsync 来获取公钥和私钥进行测试(一旦它工作,我将切换到 GenerateDataKeyPairWithoutPlaintextAsync)。
GenerateDataKeyPairResponse 具有公钥、私钥密文和私钥明文的三个内存流。
我似乎无法将这些内存流中的任何一个转换为字符串,因此我实际上可以使用这些键。
SDK 文档(https://docs.aws.amazon.com/sdkfornet/v3/apidocs/Index.html)说如果使用 HTTP api,它将是 Base64 编码的,SDK 是否使用 HTTP api?我好像说不出来。
我已经尝试使用 StreamReader.ReadToEnd() 并使用 Encoding.ENCODING.FromString(stream.ToArray()) 使用所有编码,但我似乎无法得到合理的值。
我在这里错过了一些重要的事情吗?
谢谢
添加代码:
# USING: AWSSDK.KeyManagementService VERSION: 3.5.0-beta
using System;
using System.IO;
using System.Threading.Tasks;
using Amazon;
using Amazon.KeyManagementService;
using Amazon.KeyManagementService.Model;
using Amazon.Runtime;
namespace ConsoleApp1
{
class Program
{
static async Task Main(string[] args)
{
var credentials = new BasicAWSCredentials("AccessKey", "SecretKey");
var kmsClient = new AmazonKeyManagementServiceClient(credentials, RegionEndpoint.EUCentral1);
const string keyId = "CMKKey";
var dataKeyRequest = new GenerateDataKeyPairRequest
{
KeyId = keyId,
KeyPairSpec = DataKeyPairSpec.RSA_2048
};
var dataKeyPairResponse = await kmsClient.GenerateDataKeyPairAsync(dataKeyRequest);
var publicKeyStream = dataKeyPairResponse.PublicKey;
var privateKeyStream = dataKeyPairResponse.PrivateKeyPlaintext;
var publicReader = new StreamReader( publicKeyStream );
var publicKey = publicReader.ReadToEnd();
var privateReader = new StreamReader( privateKeyStream );
var privateKey = privateReader.ReadToEnd();
Console.WriteLine(publicKey);
Console.WriteLine(privateKey);
}
}
}