【发布时间】:2020-03-05 05:44:23
【问题描述】:
我正在尝试使用 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);
}
}
}
【问题讨论】:
-
嗨,Alex,你能分享你当前的代码吗?
-
嗨@MartinBeeby Here 是我一直在测试的代码。我希望 publicKey 和 privateKey 现在是清晰的字符串,但它们似乎不是我能解决的任何编码。谢谢
-
是的,返回的字符串看起来很奇怪。根据文档,它们不是在 SDK 中进行 base64 编码:“获取和设置属性 PrivateKeyPlaintext。私有密钥的明文副本。当您使用 HTTP API 或 AWS CLI 时,该值是 Base64 编码的。否则,它不是 Base64 编码的。”明天我会调查更多。
标签: c# .net-core aws-sdk-net