我正在尝试弄清如何计算 AWS 消息属性的 MD5 摘要。我正在遵循 URI:SQS 消息元数据 > 计算消息属性的 MD5 消息摘要,但是虽然这似乎很简单,我正在尝试获取以下属性的哈希值。
var messageAttributes = new Dictionary<string, MessageAttributeValue>
{
{"UserName", new MessageAttributeValue {DataType ="String", StringValue = "Me"}}
};
我发送了这条消息,MD5响应是3a6071d47534e3e07414fea5046fc217
尝试查找文档以确定是否可以解决此问题:
private void CustomCalc()
{
var verifyMessageAttributes = new List<byte>();
verifyMessageAttributes.AddRange(EncodeString("UserName"));
verifyMessageAttributes.AddRange(EncodeString("String"));
verifyMessageAttributes.AddRange(EncodeString("Me"));
var verifyMessageAttributesMd5 = GetMd5Hash(verifyMessageAttributes.ToArray());
}
private List<byte> EncodeString(string data)
{
var result = new List<byte>();
if (BitConverter.IsLittleEndian)
{
result.AddRange(BitConverter.GetBytes(data.Length).Reverse());
}
else
{
result.AddRange(BitConverter.GetBytes(data.Length));
}
result.AddRange(Encoding.UTF8.GetBytes(data));
return result;
}
public static string GetMd5Hash(byte[] input)
{
using (var md5Hash = MD5.Create())
{
// Convert the input string to a byte array and compute the hash.
var dataBytes = md5Hash.ComputeHash(input);
// Create a new string builder to collect the bytes and create a string.
var sBuilder = new StringBuilder();
// Loop through each byte of the hashed data and format each one as a hexadecimal string.
foreach (var dataByte in dataBytes)
{
sBuilder.Append(dataByte.ToString("x2"));
}
// Return the hexadecimal string.
return sBuilder.ToString();
}
}
但是我最终得到了这个cf886cdabbe5576c0ca9dc51871d10ae。有人知道我错在哪里吗?我猜这应该不难,只是我暂时没看出来。