规范序列化对象

时间:2014-04-02 19:10:00

标签: c# .net security validation hmac

我希望通过使用第三方在两个服务器之间安全地传输对象。

服务器和第三方都知道对象的结构,并且由第三方来格式化对象(可能是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或任何其他序列化程序也可以这样说,大概是因为顺序与它们的预期功能无关(用于序列化,而不是验证)。

2 个答案:

答案 0 :(得分:0)

我对此的解决方案是将序列化(说json)然后只是hmac序列化数据。

hmac只适用于提供的json。

试图让2个系统完全相同地序列化是不现实的。

答案 1 :(得分:0)

是的,有Data Contracts
具体来说,DataMemberAttribute具有Order属性:
"获取或设置成员的序列化和反序列化的顺序。"