我需要为使用.NET框架中找到的XMLSerializer序列化的对象生成一个HMAC。每个对象将包含一个名为“HMAC”的属性,该属性将包含该对象的值本身的散列,但不包括“HMAC”字段。我发现this question提到了CLR中的内置解决方案,但没有详细说明它的名称或使用方法。在.NET中为XMLSerialized对象生成哈希签名(HMAC)的最佳方法?
样本对象会是这个样子:
[Serializable]
[XmlRoot("request", IsNullable = false)]
public class Request
{
[XmlElement(ElementName = "hmac")]
public string Hmac { get; set; }
[XmlElement(ElementName = "nonce")]
public string Nonce { get; set; }
[XmlElement(ElementName = "expiration")]
public DateTime Expiration { get; set; }
/* A bunch of other properties to be serialized */
private Request() { }
public Request(string hmac, string nonce, DateTime expiration)
{
Hmac = hmac;
Nonce = nonce;
Expiration = expiration;
}
}
的HMAC属性将需要设置为整个对象的序列化,排除了HMAC对象本身。我的第一个想法是设立某种形式的双通道串行化,其中涉及:
- 第一遍
- 序列化整个对象
- 哈希结果设定一个xmlignore属性设置为HMAC对象,设置HMAC属性的值
- 重新序列化整个事情,准备传输。
这是最好的方法吗?有没有人做过这样的事情,你发现什么是最干净的方式?
“信封”方法是更好的方法。当然,信封想法在SOAP中很重要。 – Cheeso 2009-11-26 16:03:22