当然建个方法给本人更好
解决方案
20
using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; /// <summary> /// 数据加密解密 /// </summary> public class Hash { /// <summary> /// 公用密钥 /// </summary> const string key = "CSDN"; /// <summary> /// 标准字串解密 /// </summary> /// <param name="strText">解密字串</param> /// <param name="key">密钥</param> /// <returns></returns> //public static string DecryptString(string strText, string key) public static string DeCode(string strText) { try { byte[] buffer = new MD5CryptoServiceProvider().ComputeHash(Encoding.ASCII.GetBytes(key)); TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider(); provider.Key = buffer; provider.Mode = CipherMode.ECB; byte[] inputBuffer = Convert.FromBase64String(strText); return Encoding.ASCII.GetString(provider.CreateDecryptor().TransformFinalBlock(inputBuffer, 0, inputBuffer.Length)); } catch { return "加密密钥错误!"; } } /// <summary> /// UTF8字串解密(中文) /// </summary> /// <param name="strText">解密字串</param> /// <param name="key">密钥</param> /// <returns></returns> //public static string DecryptUTF8String(string strText, string key) public static string DeCodeUTF8(string strText) { try { byte[] buffer = new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(key)); TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider(); provider.Key = buffer; provider.Mode = CipherMode.ECB; byte[] inputBuffer = Convert.FromBase64String(strText); return Encoding.UTF8.GetString(provider.CreateDecryptor().TransformFinalBlock(inputBuffer, 0, inputBuffer.Length)); } catch { return "加密密钥错误!"; } } /// <summary> /// 标准字串加密 /// </summary> /// <param name="strText">加密字串</param> /// <param name="key">密钥</param> /// <returns></returns> //public static string EncryptString(string strText, string key) public static string EnCode(string strText) { byte[] buffer = new MD5CryptoServiceProvider().ComputeHash(Encoding.ASCII.GetBytes(key)); TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider(); provider.Key = buffer; provider.Mode = CipherMode.ECB; byte[] bytes = Encoding.ASCII.GetBytes(strText); string str = Convert.ToBase64String(provider.CreateEncryptor().TransformFinalBlock(bytes, 0, bytes.Length)); provider = null; return str; } /// <summary> /// UTF8字串加密(中文) /// </summary> /// <param name="strText">加密字串</param> /// <param name="key">密钥</param> /// <returns></returns> //public static string EncryptUTF8String(string strText, string key) public static string EnCodeUTF8(string strText) { byte[] buffer = new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(key)); TripleDESCryptoServiceProvider provider = new TripleDESCryptoServiceProvider(); provider.Key = buffer; provider.Mode = CipherMode.ECB; byte[] bytes = Encoding.UTF8.GetBytes(strText); string str = Convert.ToBase64String(provider.CreateEncryptor().TransformFinalBlock(bytes, 0, bytes.Length)); provider = null; return str; } }
这是原来本人用的MD5的代码建的一个类
20
那所谓的“碰撞”,它跟破解无关,其实就是个噱头。
例如说一篇合同书获得一个 md5 签名,假设你给一个“碰撞”结果,问一下你给的内容能恰好就是这篇合同吗?假设人家验证结果中必须在某个地方有10个字,或假设人家验证结果的长度必须跟原来的合同一样大小,还“碰撞个鬼”啊!碰撞其实都是哄外行的。
相似地,有的人要求你先在一个网站上吧你要验证的内容输入一遍,然后他保存到数据库中。然后再让你输入md5签名,于是它1秒钟内给你查询出你输入的内容了。他骗你说”看,本人破解了md5了吧?“,这是不是就是哄小傻子的呢?原因是这个根本不需要破解任何东西,根本不针对加密,任何转换方法(甚至任何$@#~!&*$$&*做法)都可以这样用查表方法来糊弄一下,这也叫做破解?
例如说一篇合同书获得一个 md5 签名,假设你给一个“碰撞”结果,问一下你给的内容能恰好就是这篇合同吗?假设人家验证结果中必须在某个地方有10个字,或假设人家验证结果的长度必须跟原来的合同一样大小,还“碰撞个鬼”啊!碰撞其实都是哄外行的。
相似地,有的人要求你先在一个网站上吧你要验证的内容输入一遍,然后他保存到数据库中。然后再让你输入md5签名,于是它1秒钟内给你查询出你输入的内容了。他骗你说”看,本人破解了md5了吧?“,这是不是就是哄小傻子的呢?原因是这个根本不需要破解任何东西,根本不针对加密,任何转换方法(甚至任何$@#~!&*$$&*做法)都可以这样用查表方法来糊弄一下,这也叫做破解?
20
哄小傻子,才是“破解”。
你让我们说真话,你听吗?
你让我们说真话,你听吗?
20
你只能说碰撞存在,但不一定是明文
至于你说网上那种爆库的手段,那其实只是数据库查询,他只是收集了大量md5的密文和明文,算不上破解
当然这种东西其实也没啥用处,原因是实际上md5的明文本人就不一定就只是单纯的密码,而且你要愿意也可以不仅仅是标准md5,还可以是带密钥的Hmac md5算法
至于你说网上那种爆库的手段,那其实只是数据库查询,他只是收集了大量md5的密文和明文,算不上破解
当然这种东西其实也没啥用处,原因是实际上md5的明文本人就不一定就只是单纯的密码,而且你要愿意也可以不仅仅是标准md5,还可以是带密钥的Hmac md5算法
20
MD5都是穷举这种暴力破解方式,所以这问题就转化为从数据库遍历找到明文需要多少时间……