我需要为使用 .NET 框架中的 XMLSerializer 序列化的对象生成 HMAC。每个对象都将包含一个名为“HMAC”的属性,该属性将包含对象本身值的哈希值,但不包括“HMAC”字段。我发现这个问题提到了 CLR 中的内置解决方案,但没有详细说明它的确切名称或我如何使用它?
示例对象看起来像这样:
[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 属性的值
- 重新序列化整个事情,准备传输。
这是最好的方法吗?以前有没有人做过这样的事情,你发现什么是最干净的方法???