我希望通过使用第三方在两个服务器之间安全地传输对象。
服务器和第三方都知道对象的结构,并且由第三方来格式化对象(可能是json,xml,form-encoding等)。
class MyObject
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
如果我尝试计算HMAC的HMAC,这个对象有很多可能的表示会引起问题。
以下两个表示从对象的角度来看是等效的,但是,会产生完全不同的HMAC值:
JSON
{"Id":12345,Name:"Steve McQueen",Age:52}
JSON(但顺序不同
{Age:52,"Id":12345,Name:"Steve McQueen"}
表格编码
Age=52&Name=Steve%20McQueen&Id=12345
.NET中是否有任何序列化可以考虑字段的顺序?
我正在考虑使用BinaryFormatter,但是,我没有看到任何保证,如果您将同一个对象格式化两次,则会导致相同的二进制输出。 JavaScriptSerializer
或任何其他序列化程序也可以这样说,大概是因为顺序与它们的预期功能无关(用于序列化,而不是验证)。
答案 0 :(得分:0)
我对此的解决方案是将序列化(说json)然后只是hmac序列化数据。
hmac只适用于提供的json。
试图让2个系统完全相同地序列化是不现实的。
答案 1 :(得分:0)
是的,有Data Contracts!
具体来说,DataMemberAttribute具有Order属性:
"获取或设置成员的序列化和反序列化的顺序。"