65.9K
CodeProject 正在变化。 阅读更多。
Home

适用于 .NET 的完整用户密码管理

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.31/5 (7投票s)

2005年6月24日

2分钟阅读

viewsIcon

27526

downloadIcon

1107

本文创建了一个完整的套件,用于管理用户和用户密码。该应用程序使用 XML 文件和 MD5 加密保存和加载所有数据。

Sample Image

引言

我一直在寻找一种将用户数据保存到 XML 文件中的简单方法。我找到的所有解决方案都使用了 XML 序列化(=> 不是很简单)。因此,我决定创建自己的应用程序。出于安全原因,XML 文件中的数据必须进行编码。

本文讨论了以下主题

  1. 使用 MD5 编码对字符串进行编码。
  2. 将所有用户数据库从 XML 文件加载到应用程序中。
  3. 将所有用户数据库保存到 XML 文件中。
  4. ArrayList 中查找对象。

背景

要更改桌面背景,应用程序需要使用 WinAPI SystemParametersInfo 并为其提供所需的图像参数。唯一的问题是,API 仅接受 BMP 图像类型。我的解决方案是从目录中的每个 JPG 或 JPEG 文件创建 BMP。

Using the Code

  1. 使用 MD5 编码对字符串进行编码

    为了进行编码,此应用程序创建了一个 MD5 编码对象。使用 StringBuilder,该 string 然后转换为字节数组,并在 MD5 编码后转换回 string

    MD5 md5serv = MD5CryptoServiceProvider.Create();
    byte[] hash;
    StringBuilder stringbuff = new StringBuilder();
    ASCIIEncoding asciienc = new ASCIIEncoding();
    
    // convert string into array of bytes
    byte[] buffer = asciienc.GetBytes(raw);
    
    // Comupte the hash for the string
    hash = md5serv.ComputeHash(buffer);
    foreach (byte b in hash) { stringbuff.Append(b.ToString("x2")); }
    return stringbuff.ToString();
  2. 将所有用户数据库从 XML 文件加载到应用程序中

    使用的方法将 XML 文件读取到 XmlTextReader 中。然后它搜索新的 XML 元素。对于每个元素,该方法提取其属性。属性是从 reader.Value 提取的。

    while (reader.Read()) {
        if (reader.NodeType == XmlNodeType.Element) {
            elementName = reader.Name;
            while (reader.MoveToNextAttribute()) {
                if (reader.Name == "Password")
                    myUser.Password = reader.Value;
                }
            }
        }
  3. 将所有用户数据库保存到 XML 文件中

    从应用程序将所有用户数据库保存到 XML 文件中。此处使用的方法使用 XmlTextWriter。它将所有用户保存到新的 XML 文件中。首先,必须设置 XML 选项 - 例如格式和缩进。然后它写入起始元素。之后,对于每个用户,该方法将其属性(XML 属性)添加到用户名(XML 元素)。

    XmlTextWriter writer = new XmlTextWriter(strPath + "\\users.xml", null);
    writer.Formatting = Formatting.Indented;
    writer.Indentation = 4;
    writer.WriteStartElement("Users");
    foreach (User myUser in myAL) {
        for each user (myUser.UserName);
        writer.WriteAttributeString("Password", myUser.Password);
        writer.WriteAttributeString("Previliage", myUser.Previliage);
        writer.WriteEndElement();
    }
    writer.Flush();
    writer.Close();
  4. ArrayList 中删除对象

    如果您想从 ArrayList 中删除对象,您不需要任何索引。您所需要的只是找到正确的指针并将其删除。

    foreach (User myUser in myAL) {
        if (myUser.UserName == (string)listBoxUser.SelectedItem)
            myAL.Remove(myUser);
        }
    }

历史

  • 2005 年 6 月 24 日:初始版本

许可证

本文没有附加明确的许可,但可能包含文章文本或下载文件本身中的使用条款。如有疑问,请通过下面的讨论区联系作者。可以在 此处 找到作者可能使用的许可列表。

© . All rights reserved.