代码改变世界

数据加密之MD5加密

2015-05-06 14:16  糯米粥  阅读(928)  评论(0编辑  收藏  举报

MD5是一个安全的散列算法,有两个特点:
1、输入两个不同的明文(一段原始的数字信息)不会得到相同的输出值
2、根据输出值,不能得到原始的明文,即过程不可逆
所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,然后在所谓的解密的时候,都是通过这个映射表来查找其所对应的原始明文。
而绝对没有一种算法,可以通过输出加密后的散列值算出原始明文。

了解更多看百度百科:

http://baike.baidu.com/link?url=R7WBookslKWRvprcZ6o4ZkurlXDPTaCqr6kTzT1WWIPwTgb5eRpi2e6dVXMEKoM_

http://baike.baidu.com/link?url=HsaSyVnnJ3n2Ep2XVoSPv0SBJRvCY0Zm18MqDZIvvkJUwSZvgz4yS9upDY_YTVcVBOpUZUxFVyio4r_yY0Xq5K

 

MD5加密是不可逆的。故数据已经很安全了,代码如下

MD5CryptoServiceProvider在命名空间:System.Security.Cryptography;

 1    #region =======MD5加密======
 2         /// <summary>
 3         /// MD5加密
 4         /// </summary>
 5         /// <param name="sDataIn"></param>
 6         /// <returns></returns>
 7         public static string GetMD5(string sDataIn)
 8         {
 9             MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
10             byte[] bytValue, bytHash;
11             bytValue = System.Text.Encoding.UTF8.GetBytes(sDataIn + "unity3d");
12             bytHash = md5.ComputeHash(bytValue);
13             md5.Clear();
14             string sTemp = "";
15             for (int i = 0; i < bytHash.Length; i++)
16             {
17                 sTemp += bytHash[i].ToString("X").PadLeft(2, '0');
18             }
19             return sTemp.ToLower();
20         }

当然,你可以把原始密码用MD5加密几次。这样是不是更加安全呢。

 1 /// <summary>
 2         /// 登陆入口,用于密码加密,加密后的密码为:  s+md5(s+md5(pwd))
 3         /// </summary>
 4         /// <param name="pwd">用户输入的密码或者数据库中存储的用户密码</param>
 5         /// <param name="s">随机产生一个两位的字母:s,也可以自己指定字母</param>
 6         /// <returns></returns>
 7         public static string Entry(string pwd, string s)
 8         {
 9             if (string.IsNullOrEmpty(s))
10             {
11                 Random randmon = new Random();
12                 s = ((char)randmon.Next(65, 91)).ToString() + ((char)randmon.Next(65, 91)).ToString();
13             }
14             return s + GetMD5((s + GetMD5(pwd)));
15         }

然后直接调用Entry("unity3d","AB");即可。