我有一个 POCO,我正在为使用 AWS KeyManagementService 生成签名
var signResponse= await client.SignAsync(new Amazon.KeyManagementService.Model.SignRequest()
{
KeyId = "keyid",
MessageType = MessageType.RAW,
SigningAlgorithm = SigningAlgorithmSpec.RSASSA_PKCS1_V1_5_SHA_256,
Message = new System.IO.MemoryStream(JsonSerializer.Serialize(item).ToByteArray())
});
然后我将 sig 转换MemoryStream
为string
并保存在数据库中
string sig = Encoding.Unicode.GetString(response.Signature.ToArray());
在检索对象(另一个请求)后,我使用验证签名
var verifyResponse = await client.VerifyAsync(new Amazon.KeyManagementService.Model.VerifyRequest()
{
KeyId = "keyid",
MessageType = MessageType.RAW,
SigningAlgorithm = SigningAlgorithmSpec.RSASSA_PKCS1_V1_5_SHA_256,
Message = new System.IO.MemoryStream(JsonSerializer.Serialize(item).ToByteArray()),
Signature = new System.IO.MemoryStream(Encoding.Unicode.GetBytes(sig ?? ""))
});
不幸的是它失败了,因为签名没有得到验证。如果我将这两个电话一个接一个地拨打,并将其设置为Signature
验证成功。VerifyRequest
signReponse.Signature
这让我相信它与存储在数据库中的签名流的编码/解码有关。我尝试了所有可用的编码Encoding
。
我错过了一些概念性的东西吗?在这种情况下应该如何存储签名?