代码改变世界

数据加密之MD5加密

  糯米粥  阅读(941)  评论(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");即可。

 

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
'
点击右上角即可分享
微信分享提示