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(); } } }
说点什么
欢迎讨论