我需要爲使用.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