C#使用MD5进行的密码管理与登录验证

内容分享1个月前发布
0 0 0

C#使用MD5进行的密码管理与登录验证程序实例

一、程序界面

C#使用MD5进行的密码管理与登录验证

二、MD5

1、MD5信息摘要算法

  MD5信息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
  MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般提议改用其他算法,如SHA-2。

  2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。
  MD5由MD4、MD3、MD2改善而来,主要增强算法复杂度和不可逆性。  MD5算法因其普遍、稳定、快速的特点,仍广泛应用于普通数据的加密保护领域。

2、原理

  MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
  信息摘要最终处理成以A, B, C, D 的形式输出。也就是开始于A的低位在前的顺序字节,结束于D的高位在前的顺序字节。

3、应用

  用于密码管理
  当我们需要保存某些密码信息以用于身份确认时,如果直接将密码信息以明码方式保存在数据库中,不使用任何保密措施,系统管理员就很容易能得到原来的密码信息,这些信息一旦泄露, 密码也很容易被破译。为了增加安全性,有必要对数据库中需要保密的信息进行加密,这样,即使有人得到了整个数据库,如果没有解密算法,也不能得到原来的密码信息。MD5算法可以很好地解决这个问题,由于它可以将任意长度的输入串经过计算得到固定长度的输出,而且只有在明文一样的情况下,才能等到一样的密文,并且这个算法是不可逆的,即便得到了加密后来的密文,也不可能通过解密算法反算出明文。这样就可以把用户的密码以MD5值(或类似的其它算法)的方式保存起来,用户注册的时候,系统是把用户输入的密码计算成 MD5 值,然后再去和系统中保存的 MD5 值进行比较,如果密文一样,就可以认定密码是正确的,否则密码错误。通过这样的步骤,系统在并不知道用户密码明码的情况下就可以确定用户登录系统的合法性。这样不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在必定程度上增加了密码被破解的难度。

三、System.Security.Cryptography 命名空间

1、轻松搞定加密

  在 .NET Framework中,复杂的加密技术已经被封装在各个 .NET 框架类中,并且由一个System.Security.Cryptography 命名空间包含这些与加密、签名相关的类。利用这些类,我们就可以很方便地使用各种广泛使用的算法,包括RSA, DSA, Rijndael, SHA和其他Hash算法等等。

2、术语

C#使用MD5进行的密码管理与登录验证

3、散列

  散列,简单点就是一种变换,使变换后的数据在必定小概率情况下代表变换前数据的“标签”,这个标签就是散列,变换就是散列算法,往往这些算法是公开的、不可逆的!由于算法公开的,为了防止大家谁都可以对源数据进行散列,所以出现增加一个KEY的变形散列算法(HMAC算法)。

  散列主要用在对数据有效性的验证方面。

//对byte数据串进行散列
HashAlgorithm oTransform = (HashAlgorithm)MD5.Create();
byte[] AInput={0x31,0x31,0x31,0x31};
byte[] AOutput = oTransform.ComputeHash(AInput);

//对文件流进行散列
FileStream oFile = new FileStream(“c://10.vbs”, FileMode.Open);
HashAlgorithm oTransform = (HashAlgorithm)MD5.Create();
byte[] AOutput = oTransform.ComputeHash(oFile);
oFile.Close();

四、MD5加密类的实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;

namespace Ky_Login.DAL
{
    class clsMD5Encrypt
    {
        public static string GetMD5Password(string str)
        {
            string strMD5Password = String.Empty;
            MD5 md5 = MD5.Create();
            byte[] byteArray = md5.ComputeHash(Encoding.Unicode.GetBytes(str));
            for (int i = 0; i < byteArray.Length; i++)
            {
                strMD5Password += byteArray[i].ToString("x");
            }
            return strMD5Password;
        }
    }
}

五、参考资料

1、百度百科
2、《C#项目开发全程实录》明日科技编著
3、byxdaz的博客https://blog.csdn.net/byxdaz/article/details/6741236
4、醉马不肖的博客https://blog.csdn.net/zfive5/article/details/1428173

六、源程序下载

1、dalong10的下载https://download.csdn.net/download/dalong10/13091644

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...