2009-06-18 2 views
0

У меня есть класс, как Employee. У этого класса есть такие поля, как Id, Name, Surname, Tasks (строковый массив), isManager, TaskDueDates (массив дат). Я хочу сгенерировать текст с этого объекта. Я думаю, что для использования разделителей это базовое решение. Например, мой текст может быть: 13; George; Smith; {«Task1», «Task2», «Task3»}, false, {this night, nextweek}Шифрование объектов

Но если одно из полей объекта включает это символы разделителя; программа не будет работать. После создания текста; Я хочу, чтобы encryp его с MD5, используя какой-то ключ. Это приведет к генерации некоторых зашифрованных данных, таких как asp .net viewstate information. Программа также расшифрует эти зашифрованные данные в исходный объект.

Как это сделать? Я использую Asp .Net 2005

ответ

4

MD5 не шифрует. Это алгоритм хэширования. Если вы создаете MD5 из некоторых данных, невозможно создать данные из хэша. См. http://en.wikipedia.org/wiki/Cryptographic_hash_function для более подробной информации.

Для вашего вопроса: попробуйте эту ссылку http://www.codeproject.com/KB/security/SimpleEncryption.aspx

1

Прежде всего вы не можете расшифровать MD5, вам нужен реальный алгоритм шифрования для этого. Возможно, вы захотите использовать AES256.

Что касается полей, то Unix имеет полевое разделение текста навсегда, и они обычно помещают '\' перед любым символом, который обычно является особым, но не должен быть в этом случае (если вы хотите использовать '\' в тексте, вы пишете '\'). Вы можете украсть это.

Редактировать: Если вы используете ASP, почему бы вам не форматировать вывод как HTML? Затем вы можете поместить вывод в таблицу.

+0

Есть ли какой-либо другой метод вместо использования разделителей? Может ли сериализоваться для этой цели? – 2009-06-18 10:53:44

+0

Да, они могут использоваться –

0

Как уже упоминалось в ответах, для шифрования вам необходимо использовать некоторые encryption algorithm, такие как AED или DES.

Для сериализации, которая преобразует ваш объект в строку, вы можете создать свою собственную схему, используя ; в качестве разделителя. Чтобы обрабатывать случаи, когда ввод содержит ;, вам нужно будет преобразовать ; в нечто вроде \;. Ваш Сериализованный объект будет выглядеть примерно так:

Name: Geor;ge 

    3;Geor\;ge;Smith;{"Task1","Task2","Task3"};false;{this night,nextweek} 

При преобразовании обратно в объект, когда вы найдете \ до ;, вы будете знать, что это ; является частью строки, а не фактический сепаратор.

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

0

Вместо того, чтобы делать ручную сериализацию, если вы хотите, чтобы ваш объект в воспринимаемом формате, используйте автоматический XML-сериализацию:

XmlSerializer formatter; 

using (FileStream file = new FileStream (Path.Combine (Application.StartupPath, GetType().ToString() + ".xml.template"), FileMode.Create)) 
{ 
     formatter = new XmlSerializer (typeof (G)); 
     formatter.Serialize (file, this); 
} 

с XML сериализацией убедитесь, что члены, которые вы хотите в файле XML являются public. private и protected не будут XML-сериализованными.

Смежные вопросы