0

我有一个像Employee这样的班级。这个类有一些字段,如 Id,Name,Surname, Tasks(一个字符串数组), isManager, TaskDueDates (一个日期时间数组)。我想从这个对象生成一个文本。我认为使用分隔符,这是一个基本的解决方案。例如我的文本可以是:13;George;Smith;{"Task1","Task2","Task3"},false, {this night,nextweek}

但如果对象的其中一个字段包含此分隔符;程序将无法运行。在我生成文本之后;我想通过使用一些密钥用 MD5 加密它。这将生成一些加密数据,如 asp .net viewstate 信息。程序还会将此加密数据解密到源对象。

我怎样才能做到这一点?我正在使用 Asp .Net 2005

4

4 回答 4

4

MD5 没有加密。这是一种哈希算法。如果您从某些数据中创建 MD5,则无法从散列中创建数据。有关详细信息,请参阅http://en.wikipedia.org/wiki/Cryptographic_hash_function 。

对于你的问题:试试这个链接 http://www.codeproject.com/KB/security/SimpleEncryption.aspx

于 2009-06-18T09:43:38.120 回答
1

首先你不能解密 MD5,你需要一个真正的加密算法。您可能想要使用 AES256。

至于字段,Unix 一直有字段分隔文本,他们通常会在任何通常特殊的字符前面放置一个 '\',但在这种情况下不应该(如果你想在文本,你写'\')。你可以偷那个。

编辑:如果您使用的是 ASP,为什么不将输出格式化为 HTML?然后你可以把输出放在一个表中。

于 2009-06-18T09:46:14.480 回答
0

正如答案中已经提到的,对于加密,您需要使用一些加密算法,如 AED 或 DES。

对于序列化,即将对象转换为字符串,您可以制作自己的方案,例如;用作分隔符。要处理输入包含 的情况;,您需要转换;\;. 您的序列化对象将如下所示:

Name: Geor;ge

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

转换回对象时,只要在\之前找到;,您就会知道这;是字符串的一部分,而不是实际的分隔符。

关于使用语言序列化功能,是的,您应该能够做到这一点,但这取决于您正在使用的语言。

于 2009-06-18T13:57:38.950 回答
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 序列化。

于 2009-06-18T15:58:54.643 回答