MD5是一个安全的散列算法,有两个特点:
1、输入两个不同的明文(一段原始的数字信息)不会得到相同的输出值
2、根据输出值,不能得到原始的明文,即过程不可逆
所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,然后在所谓的解密的时候,都是通过这个映射表来查找其所对应的原始明文。
而绝对没有一种算法,可以通过输出加密后的散列值算出原始明文。
了解更多看百度百科:
http://baike.baidu.com/link?url=R7WBookslKWRvprcZ6o4ZkurlXDPTaCqr6kTzT1WWIPwTgb5eRpi2e6dVXMEKoM_
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");即可。