MD5加密的那些事

 1.简单定义: MD5算法是一种散列(hash)算法,任何长度的任意内容都可以用MD5计算出散列值,以实现加密的效果。散列算法有很多种,MD5只是其中一个 ,有其他的如sha1等。

 2.它的用处:一般的网站,用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,来验证该用户的合法性,因此MD5算法是不可逆,无法根据Md5值反推内容,故现在广泛应用于网站用户信息加密(但还是会被黑掉)。

 3.这些年出现过很多网站被“拖库”的事,也就是几十万几百万的用户信息泄露,比如之前的12306,如果是明文存储,那么一旦被拖库,账号密码暴露无疑,但加密过的密码也并不是完全安全, 比如这个网站:http://www.cmd5.com/,再比如http://www.hashkiller.co.uk/,都是可以根据加密的值”反推”出原账户密码,好吧,很可怕,貌似加密不加密没什么区别~~~~(>_<)~~~

  4.第一次听到MD5就是从某些社工库网站上down了一些知名网站的用户名密码,然后猥琐的去尝试,发现了那些“破解”MD5的网站,MD5算法不可逆,的确是不可逆的。上边给出的破解MD5的两个网站也不是逆向运算,而是暴力破解,说白了,和数据库中的一个一个比对,即撞库。所以,不要所有的网站使用相同的密码,这句话还是谨记在心吧。

  5.MD5转换器:链接:http://pan.baidu.com/s/1eQfFTnk 密码:uldw

  6.虽然加密后md5值相同的概率几乎为0,但现在可以人工生成相同MD5值的文件,比如这两个:链接:http://pan.baidu.com/s/1gdAfV4v 密码:ivg0

  好了,以上都是关于MD5的闲扯,下面是C#中实现md5的加密:

   字符串的转换:

private static string GetMD5FromString(string msg)
            {
             using (MD5 md5 = MD5.Create())
         {
        byte[] msgBuffer = Encoding.Default.GetBytes(msg);
        byte[] md5Buffer = md5.ComputeHash(msgBuffer);
        md5.Clear();//释放资源
        StringBuilder sbMd5 = new StringBuilder();
        for (int i = 0; i < md5Buffer.Length; i++)
        {
            sbMd5.Append(md5Buffer[i].ToString("x2"));
        }
        return sbMd5.ToString();
    }
            }

文件的转换:

private static string GetMD5FromFile(string path)
        {
            using (MD5 md5 = MD5.Create())
            {

                using (FileStream fsRead = File.OpenRead(path))
                {
                    byte[] bytes = md5.ComputeHash(fsRead);
                    md5.Clear();
                    StringBuilder sbMd5 = new StringBuilder();
                    for (int i = 0; i < bytes.Length; i++)
                    {
                        sbMd5.Append(bytes[i].ToString("X2"));
                    }
                    return sbMd5.ToString();
                }

            }
        }

Written by

说点什么

欢迎讨论

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒