MD5解密解决方法

MD5解密
加密方法如下 帮忙写一个解密函数

        public string EncryptString(string str)
        {
            ASCIIEncoding ASC = new ASCIIEncoding();
            byte[] arrPwd = ASC.GetBytes(str + "jm");
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] arrHashPwd = md5.ComputeHash(arrPwd);
            //转成字符串,表示十六进制值
            string sHashPwd = "";
            foreach (byte b in arrHashPwd)
            {
                if (b < 16)
                    sHashPwd = sHashPwd + "0" + b.ToString("x");
                else
                    sHashPwd = sHashPwd + b.ToString("x");
            }
            return sHashPwd;
        }

------解决方案--------------------
MD5不可逆吧?能解密?
------解决方案--------------------
你可以认为md5不可逆,你还不如自己搞个字符串加密算法呢,那样随便你控制加密解密
------解决方案--------------------
MD5是摘要算法,
打个比方
一个字符串
1234567890
摘要出来的结果是368
你能从368推导出原来的字符串么
------解决方案--------------------
MD5不可逆
------解决方案--------------------
换方法吧。。。。。
------解决方案--------------------
引用:
5个角的都不知道md5根本就不是加密算法?

据说山东大学某人解析了这个算法,不知道解析这个词用的对不起,小学老师死得早。
你一个红钻石都不知道这件事?
------解决方案--------------------
正是因为知道这个市,才知道有些人所谓的“解密”是多么不靠谱。

她“终于”证明了,原来确实可以用一种方法找到“碰撞”结果啊。例如你拿出一本有着8000字(因为单词)的莎士比亚的小说,于是王小云解释说,她找到了一种方法来用计算机生成一个有着2000万个乱码符号的文本,其md5值跟莎士比亚的这本小说的md5值恰好相等。

但是假设我们假上任意一个“防止胡乱碰撞”的条件呢?例如我们要求找到的东西的单词数量不能大于15000个,或者我们要求找到的内容的第一个词、第3000个词、最后一个词必须与莎士比亚的小说中相应位置的词一样,等等,那么就算1000个王小云也就傻眼了。(更别提那些道听途说的人了)

找到一个方法证明确实有几大可能性能够生成胡乱碰撞,这就是你说的“解析”吗?那么你的解密、解析也没有什么意义了,只是一堆乱码。
------解决方案--------------------
MD5 的解密应该是靠字典,比如:输入“123”生成密文A,当别人查询密文A的时候,就直接返回“123”了

你可以看看,我是经常用:
MD5解密网站
------解决方案--------------------
MD5是摘要算法,不属于加密算法
------解决方案--------------------
MD5主要用于校验,就是检查两个字节数组经过同一个算法,其结果是否一样;源如果一样,则结果必定一样,但如果任何一个字节不一致,其结果就差得很远。比如下载完文件后的MD5校验,压缩解压的校验,云盘系统检查到有文件需要更新的校验,以及360为什么知道有木马篡改了某一个system32下面的dll,都是这个应用。基础知识建议去看看* http://zh.wikipedia.org/wiki/MD5

所以,如果你仅仅是为了把这个密码保存到数据库里面,即使能看到数据库的人也不知道原始密码是什么,就只需要MD5“加密”就行了,无需解密,下次用户再输入密码登陆的时候,把它输入的密码重新用MD5算一次,如果和数据库里面保存的那一段密码一致,就说明是正确的。

用在我们网站上的那个密码的MD5,其实已经不是那么安全了,我们虽然无法从MD5之后的结果反推算出密码是123456之类的(计算能力足够的情况下,MD5穷举也不是什么难事),但是因为算法应用广泛,已经有不少黑客手里握着大量的MD5常用密码(比如123456,888888这种)字典,一个一个匹配就知道你的原始密码是什么了。所以现在要用MD5也需要让密码加上一个特殊的字符串再进行MD5算法,或者进行二次三次打乱加密等等来保证去字典化。比如你代码里面 
 byte[] arrPwd = ASC.GetBytes(str + "jm");
这里的jm就是你自己加的东西,除了你自己谁也不知道,这个jm就是需要保护的钥匙

如果你真的需要加密解密,则应该去看看DES对称加密算法或者RSA非对称加密算法,这些在.NET平台里面都有现成的实现,比如DES这个:http://xvto.blog.163.com/blog/static/77983414201161064245506/,其他的建议翻看MSDN