Как сериализовать объект в C # и предотвратить подделку? - PullRequest
3 голосов
/ 26 августа 2009

У меня есть класс C # следующим образом:

public class TestObj
{
    private int intval;
    private string stringval;
    private int[] intarray;
    private string[] stringarray;

    //... public properties not shown here
}

Я хотел бы сериализовать экземпляр этого класса в строку.

Дополнительно:

Я буду добавлять эту строку в качестве параметра QueryString к URL-адресу. Поэтому я хотел бы приложить некоторые усилия, чтобы гарантировать, что строка не может быть легко изменена.

Кроме того, я хотел бы, чтобы метод сериализации был эффективным, поэтому размер строки минимален.

Какие-либо предложения конкретных классов / методов .NET Framework, которые я должен использовать?

Ответы [ 2 ]

4 голосов
/ 26 августа 2009

Подпишите поток и добавьте подпись к вашему запросу. Используйте алгоритм подписи HMAC, например HMACSHA1 . Вам потребуется секрет между вашим клиентом и сервером для подписи и проверки подписи.

4 голосов
/ 26 августа 2009

1) Для сериализации:

</p> <pre><code> public String SerializeObject(TestObj object) { String Serialized = String.Empty; MemoryStream memoryStream = new MemoryStream ( ); XmlSerializer xs = new XmlSerializer(typeof(TestObj)); XmlTextWriter xmlTextWriter = new XmlTextWriter ( memoryStream, Encoding.UTF8 ); xs.Serialize (xmlTextWriter, object); memoryStream = (MemoryStream) xmlTextWriter.BaseStream; Serialized = UTF8Encoding.GetString(memoryStream.ToArray()); return Serialized; }

2) Для предотвращения взлома:

  • Придумайте секретную строку, например, "MySecretWord".
  • Возьмите экземпляр сериализованного объекта в виде строки и добавьте к нему секретное слово.
  • Хешируйте строку (например, SHA или используйте HMAC (как предложено Remus) )
  • Добавить хеш к строке запроса

На принимающей стороне (которая также знает вашу секретную строку «MySecretWord») вы удаляете хеш, берете оригинальный сериализованный экземпляр, добавляете известную секретную строку и снова хешируете ее. Затем сравните два хеша для равенства. Если они равны, ваша строка не была изменена.

Возможно, вам понадобится Url / Base64 Encode вашей строки, чтобы она работала как строка запроса. Это также важно, так как вам нужно, чтобы строка запроса прибыла точно так, как отправлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...