关于密码加密方法的还原

时间:2022-07-11 20:41:19
现有方法如下:
   using System.Security;
    using System.Security.Principal;
    using System.Security.Cryptography;
    using System.Text;

    /**//**//**//// <summary>
    /// 加密函数
    /// </summary>    
    public string Encrypt(string password)
    {   
        /**//**//**////获取Byte数组
        Byte[] clearBytes = new UnicodeEncoding().GetBytes(password);
        /**//**//**////获取Hash值
        Byte[] hashedBytes = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes);

        /**//**//**////获取加密后的信息
        return BitConverter.ToString(hashedBytes);
    }
加密前的字串: admin
加密后的结果:    19-A2-85-41-44-B6-3A-8F-76-17-A6-F2-25-01-9B-12 

如何能编写一个方法使19-A2-85-41-44-B6-3A-8F-76-17-A6-F2-25-01-9B-12 还原为admin?

29 个解决方案

#1


重读hash

#2



   md5加密是不可逆的,只有把别人的admin再加密一次,得到19-A2-85-41-44-B6-3A-8F-76-17-A6-F2-25-01-9B-12 
   再和数据库中的比较,,,,有,就成功,没有就失败...

#3


MD5加密是不可逆的
 暴力破解的话你可以一个一个试 速度狂慢

山东大学王小云教授的MD5解密方法也无非是暴力破解 只不过不是从头开始 而将范围缩小而已

#4


好象有个网站可以查询md5的。

#5


发现好多人都想把MD5或SHA1等Hash算法得到的值“解密”回原来的值,
怎么就不想一下,即使是2G的文件经过Hash计算以后也就几个字节,如果可以无损的“解密”回来,大家还用什么压缩软件啊,直接Hash一下就是好了

#6


是的,MD5加密是 不可逆的。

#7


MD5是不可逆加密,从原理上就是不可还原的。

所以HASH加密主要用于完整性保护,即消息接收方将消息内容(可能是明文)再进行一次MD5加密,用得出的密文与消息中所附带的密文进行对比,如果相等则说明消息内容在传输过程中没有被改动过。

3楼说的破解,并不是由HASH值推导出原文,而是在改变消息内容后再在消息内容中加一些无用的内容,以凑出与原来相同的HASH值,这样消息接收方就不能识别消息内容的改动。

#8


MD5加密在理论上是不可逆的。
如果用不可逆的加密方式的话,那么就2楼说的来进行比较。
要么就自己写加密方式,这样可以解密。
using System;
using System.Web.Security;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace KingdeeWeb
{
/// <summary>
///  密码加密算法类
/// </summary>
public class CommEncrypt
{
private SymmetricAlgorithm mobjCryptoService;
private string Key;


public CommEncrypt()
{
//
// TODO: 在此处添加构造函数逻辑
//
mobjCryptoService = new RijndaelManaged();
Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7"; // 任意字符串
}

/// <summary>
/// 获得密钥
/// </summary>
/// <returns>密钥</returns>
private byte[] GetLegalKey()
{
string sTemp = Key;
mobjCryptoService.GenerateKey();
byte[] bytTemp = mobjCryptoService.Key;
int KeyLength = bytTemp.Length;
if (sTemp.Length > KeyLength)
sTemp = sTemp.Substring(0, KeyLength);
else if (sTemp.Length < KeyLength)
sTemp = sTemp.PadRight(KeyLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}
/// <summary>
/// 获得初始向量IV
/// </summary>
/// <returns>初试向量IV</returns>
private byte[] GetLegalIV()
{
string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk"; // 任意字符串
mobjCryptoService.GenerateIV();
byte[] bytTemp = mobjCryptoService.IV;
int IVLength = bytTemp.Length;
if (sTemp.Length > IVLength)
sTemp = sTemp.Substring(0, IVLength);
else if (sTemp.Length < IVLength)
sTemp = sTemp.PadRight(IVLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}

/// <summary>
/// 加密方法
/// </summary>
/// <param name="Source">待加密的串</param>
/// <returns>经过加密的串</returns>
public string Encrypto(string Source)
{
byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
MemoryStream ms = new MemoryStream();
mobjCryptoService.Key = GetLegalKey();
mobjCryptoService.IV = GetLegalIV();
ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
cs.Write(bytIn, 0, bytIn.Length);
cs.FlushFinalBlock();
ms.Close();
byte[] bytOut = ms.ToArray();
return Convert.ToBase64String(bytOut);
}
/// <summary>
/// 解密方法
/// </summary>
/// <param name="Source">待解密的串</param>
/// <returns>经过解密的串</returns>
public string Decrypto(string Source)
{
byte[] bytIn = Convert.FromBase64String(Source);
MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
mobjCryptoService.Key = GetLegalKey();
mobjCryptoService.IV = GetLegalIV();
ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
return sr.ReadToEnd();
}

        /// <summary>
        /// 选择SHA1 Or MD5不可逆的加密算法
        /// </summary>
        /// <param name="PasswordString">待加密的串</param>
        /// <param name="PasswordFormat">加密的算法</param>
        /// <returns>加密的串</returns>
public string EncryptPassword(string PasswordString,string PasswordFormat) 

string EncryptPassword;
if (PasswordFormat=="SHA1")

EncryptPassword=FormsAuthentication.HashPasswordForStoringInConfigFile(PasswordString ,"SHA1"); 

else if (PasswordFormat=="MD5") 
{
EncryptPassword=FormsAuthentication.HashPasswordForStoringInConfigFile(PasswordString ,"MD5"); 

else 

EncryptPassword=""; 

return EncryptPassword;
}
}
}

#9


用DES加密解蜜吧

#10


学习

#11


偶然看到->MD5在线加密解密: http://www.xmd5.org/Encrypt_cn.htm

#12


如果真的用MD5算法加密的话, 不知道此网站上的解密是如何做到的...

大家签定一下吧...

^o^

#13


 http://www.xmd5.org/

那是 xmd5,不是md5。

#14


研究了一下, http://www.xmd5.org/index_cn.htm这个网站的解密的确实是md5,不过是UTF8编码的,而不是LZ的UnicodeEncoding。

using System;
using System.Text;
using System.Security.Cryptography;

class Test
{
  static void Main()
  {
    string s0 = "OK";
    Byte[] b0 = Encoding.UTF8.GetBytes(s0); 
    Byte[] b1 = (new MD5CryptoServiceProvider()).ComputeHash(b0); 
    string s1 = BitConverter.ToString(b1).Replace("-", ""); 
    Console.WriteLine("{0}: {1}", s0, s1);
  }
}
/*
OK: E0AA021E21DDDBD6D8CECEC71E9CF564
*/


在网页, http://www.xmd5.org/index_cn.htm中输入“E0AA021E21DDDBD6D8CECEC71E9CF564”然后点“给我转”确实能输出“OK”。但如果用一些不常见的词MD5加密后再传给它,就会输出" Result: not find",可见它是把一些常见的密码明文用MD5加密后保存起来,需要解密时再查表,如果查到,则输出结果,否则“not find”。

#15


http://www.xmd5.org/index_en.htm

This is a website about reversing md5 hash online.

Our database has  billions of md5 hash.

If the hash you present to us is included in our database, our program could reverse it immediately.

We have already selected lots of common words. 

And according to the history, we have a high rate of successful reversing.

However, we'll try the best to collect more and more hash.

#16


MD5没那么容易破的,
MD5只能作为原文的一种保护方式,
比如密码可以用MD5加密后保存在数据库中,验证时把输入的密码经过MD5加密的得到的信息与数据库比较,通过这种方法,密码在数据库中安全可靠,因为保存在数据库中的不是明文,也不担心被破解。

#17


^o^ 正如 wf5360308 所说...

#18


看来确实是不可逆啊~
只有把输入的密码重新用加密方法加密再和数据库的密码进行比较。
可惜不能破啊。

#19


在中国就是这样,搞盗版的还可以大摇大摆的在网上请人帮忙...
这跟直接去撬人家门锁没什么区别的。

#20


楼上的你不是屁话吗?
我在讨论方法就是搞盗版?盗版有这么简单的吗?
还一口一句在中国就是这样,你去过外国?也好意思开这个口。

#21


md5加密是不可逆的,只有把别人的admin再加密一次,得到19-A2-85-41-44-B6-3A-8F-76-17-A6-F2-25-01-9B-12   
再和数据库中的比较,,,,有,就成功,没有就失败... 

md5加密虽然在理论上是可逆的,但是实际应用中还没有实现
如果要利用可逆的加密,最好还是用DES或3DES.
如:
.....................
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Security.Cryptography;

namespace SFClass
{
    public class DESEncryptLib
    {
        public static byte[] DESKey = new byte[] { 0x82, 0xBC, 0xA1, 0x6A, 0xF5, 0x87, 0x3B, 0xE6, 0x59, 0x6A, 0x32, 0x64, 0x7F, 0x3A, 0x2A, 0xBB, 0x2B, 0x68, 0xE2, 0x5F, 0x06, 0xFB, 0xB8, 0x2D, 0x67, 0xB3, 0x55, 0x19, 0x4E, 0xB8, 0xBF, 0xDD };

        public string DESEncrypt(string strSource)
        {
            return DESEncrypt(strSource, DESKey);
        }
        public string DESEncrypt(string strSource, byte[] key)
        {
            SymmetricAlgorithm sa = Rijndael.Create();
            sa.Key = key;
            sa.Mode = CipherMode.ECB;
            sa.Padding = PaddingMode.Zeros;
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, sa.CreateEncryptor(), CryptoStreamMode.Write);
            byte[] byt = Encoding.UTF8.GetBytes(strSource);
            cs.Write(byt, 0, byt.Length);
            cs.FlushFinalBlock();
            cs.Close();
            return Convert.ToBase64String(ms.ToArray());
        }

        public string DESDecrypt(string strSource)
        {
            return DESDecrypt(strSource, DESKey);
        }
        public string DESDecrypt(string strSource, byte[] key)
        {
            SymmetricAlgorithm sa = Rijndael.Create();
            sa.Key = key;
            sa.Mode = CipherMode.ECB;
            sa.Padding = PaddingMode.Zeros;
            ICryptoTransform ct = sa.CreateDecryptor();
            byte[] byt = Convert.FromBase64String(strSource);
            MemoryStream ms = new MemoryStream(byt);
            CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Read);
            StreamReader sr = new StreamReader(cs, Encoding.UTF8);
            return sr.ReadToEnd();
        }




    }
}

#22


MD5不可逆,如果你需要可逆的话用SHA加密吧~

#23


网站上的MD5解密其实是在后台有个数据库,里面存放了很多实际值和相应MD5值的对应表,当你输入一个MD5码的时候,它会从数据库中找出这个码所对应的实际值,而不是去解密这个MD5

#24


看来确实是不可逆啊~ 
只有把输入的密码重新用加密方法加密再和数据库的密码进行比较。 
可惜不能破啊。
=================================
不搞盗版你去破人家加密狗干什么?吃饱撑得慌?

#25


不过如果通过多线程的话,应该在8位以内的纯字母或者数字,应该10分钟就可以重新获取密码了,不过这属于暴力破解了呵呵,建议lz采用2楼上的方法比较妥当

#26


加密分可逆不可逆。
md5不可逆,如果你想实现加密解密可以用DES算法

#27


MD5不可逆,如果你需要可逆的话用SHA加密吧~
------------------------
SHA也不可逆

#28


那么这段代码所加密的md5密码,网上的普通暴力破解工具能破解吗?

#29


引用 14 楼 *8808 的回复:
研究了一下,http://www.xmd5.org/index_cn.htm这个网站的解密的确实是md5,不过是UTF8编码的,而不是LZ的UnicodeEncoding。

C# codeusing System;using System.Text;using System.Security.Cryptography;class Test
{staticvoid Main()
  {string s0="OK";
    Byte[] b0= Encoding.UTF8.GetBytes(s0); 
    Byte[] b1= (new MD5CryptoServiceProvider()).ComputeHash(b0);string s1= BitConverter.ToString(b1).Replace("-",""); 
    Console.WriteLine("{0}: {1}", s0, s1);
  }
}/*
OK: E0AA021E21DDDBD6D8CECEC71E9CF564*/

在网页,http://www.xmd5.org/index_cn.htm中输入“E0AA021E21DDDBD6D8CECEC71E9CF564”然后点“给我转”确实能输出“OK”。但如果用一些不常见的词MD5加密后再传给它,就会输出"Result: not find",可见它是把一些常见的密码明文用MD5加密后保存起来,需要解密时再查表,如果查到,则输出结果,否则“not find”。
我怀疑这个网站是某些黑客收集攻击字典用的。

#1


重读hash

#2



   md5加密是不可逆的,只有把别人的admin再加密一次,得到19-A2-85-41-44-B6-3A-8F-76-17-A6-F2-25-01-9B-12 
   再和数据库中的比较,,,,有,就成功,没有就失败...

#3


MD5加密是不可逆的
 暴力破解的话你可以一个一个试 速度狂慢

山东大学王小云教授的MD5解密方法也无非是暴力破解 只不过不是从头开始 而将范围缩小而已

#4


好象有个网站可以查询md5的。

#5


发现好多人都想把MD5或SHA1等Hash算法得到的值“解密”回原来的值,
怎么就不想一下,即使是2G的文件经过Hash计算以后也就几个字节,如果可以无损的“解密”回来,大家还用什么压缩软件啊,直接Hash一下就是好了

#6


是的,MD5加密是 不可逆的。

#7


MD5是不可逆加密,从原理上就是不可还原的。

所以HASH加密主要用于完整性保护,即消息接收方将消息内容(可能是明文)再进行一次MD5加密,用得出的密文与消息中所附带的密文进行对比,如果相等则说明消息内容在传输过程中没有被改动过。

3楼说的破解,并不是由HASH值推导出原文,而是在改变消息内容后再在消息内容中加一些无用的内容,以凑出与原来相同的HASH值,这样消息接收方就不能识别消息内容的改动。

#8


MD5加密在理论上是不可逆的。
如果用不可逆的加密方式的话,那么就2楼说的来进行比较。
要么就自己写加密方式,这样可以解密。
using System;
using System.Web.Security;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace KingdeeWeb
{
/// <summary>
///  密码加密算法类
/// </summary>
public class CommEncrypt
{
private SymmetricAlgorithm mobjCryptoService;
private string Key;


public CommEncrypt()
{
//
// TODO: 在此处添加构造函数逻辑
//
mobjCryptoService = new RijndaelManaged();
Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7"; // 任意字符串
}

/// <summary>
/// 获得密钥
/// </summary>
/// <returns>密钥</returns>
private byte[] GetLegalKey()
{
string sTemp = Key;
mobjCryptoService.GenerateKey();
byte[] bytTemp = mobjCryptoService.Key;
int KeyLength = bytTemp.Length;
if (sTemp.Length > KeyLength)
sTemp = sTemp.Substring(0, KeyLength);
else if (sTemp.Length < KeyLength)
sTemp = sTemp.PadRight(KeyLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}
/// <summary>
/// 获得初始向量IV
/// </summary>
/// <returns>初试向量IV</returns>
private byte[] GetLegalIV()
{
string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk"; // 任意字符串
mobjCryptoService.GenerateIV();
byte[] bytTemp = mobjCryptoService.IV;
int IVLength = bytTemp.Length;
if (sTemp.Length > IVLength)
sTemp = sTemp.Substring(0, IVLength);
else if (sTemp.Length < IVLength)
sTemp = sTemp.PadRight(IVLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}

/// <summary>
/// 加密方法
/// </summary>
/// <param name="Source">待加密的串</param>
/// <returns>经过加密的串</returns>
public string Encrypto(string Source)
{
byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);
MemoryStream ms = new MemoryStream();
mobjCryptoService.Key = GetLegalKey();
mobjCryptoService.IV = GetLegalIV();
ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
cs.Write(bytIn, 0, bytIn.Length);
cs.FlushFinalBlock();
ms.Close();
byte[] bytOut = ms.ToArray();
return Convert.ToBase64String(bytOut);
}
/// <summary>
/// 解密方法
/// </summary>
/// <param name="Source">待解密的串</param>
/// <returns>经过解密的串</returns>
public string Decrypto(string Source)
{
byte[] bytIn = Convert.FromBase64String(Source);
MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);
mobjCryptoService.Key = GetLegalKey();
mobjCryptoService.IV = GetLegalIV();
ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cs);
return sr.ReadToEnd();
}

        /// <summary>
        /// 选择SHA1 Or MD5不可逆的加密算法
        /// </summary>
        /// <param name="PasswordString">待加密的串</param>
        /// <param name="PasswordFormat">加密的算法</param>
        /// <returns>加密的串</returns>
public string EncryptPassword(string PasswordString,string PasswordFormat) 

string EncryptPassword;
if (PasswordFormat=="SHA1")

EncryptPassword=FormsAuthentication.HashPasswordForStoringInConfigFile(PasswordString ,"SHA1"); 

else if (PasswordFormat=="MD5") 
{
EncryptPassword=FormsAuthentication.HashPasswordForStoringInConfigFile(PasswordString ,"MD5"); 

else 

EncryptPassword=""; 

return EncryptPassword;
}
}
}

#9


用DES加密解蜜吧

#10


学习

#11


偶然看到->MD5在线加密解密: http://www.xmd5.org/Encrypt_cn.htm

#12


如果真的用MD5算法加密的话, 不知道此网站上的解密是如何做到的...

大家签定一下吧...

^o^

#13


 http://www.xmd5.org/

那是 xmd5,不是md5。

#14


研究了一下, http://www.xmd5.org/index_cn.htm这个网站的解密的确实是md5,不过是UTF8编码的,而不是LZ的UnicodeEncoding。

using System;
using System.Text;
using System.Security.Cryptography;

class Test
{
  static void Main()
  {
    string s0 = "OK";
    Byte[] b0 = Encoding.UTF8.GetBytes(s0); 
    Byte[] b1 = (new MD5CryptoServiceProvider()).ComputeHash(b0); 
    string s1 = BitConverter.ToString(b1).Replace("-", ""); 
    Console.WriteLine("{0}: {1}", s0, s1);
  }
}
/*
OK: E0AA021E21DDDBD6D8CECEC71E9CF564
*/


在网页, http://www.xmd5.org/index_cn.htm中输入“E0AA021E21DDDBD6D8CECEC71E9CF564”然后点“给我转”确实能输出“OK”。但如果用一些不常见的词MD5加密后再传给它,就会输出" Result: not find",可见它是把一些常见的密码明文用MD5加密后保存起来,需要解密时再查表,如果查到,则输出结果,否则“not find”。

#15


http://www.xmd5.org/index_en.htm

This is a website about reversing md5 hash online.

Our database has  billions of md5 hash.

If the hash you present to us is included in our database, our program could reverse it immediately.

We have already selected lots of common words. 

And according to the history, we have a high rate of successful reversing.

However, we'll try the best to collect more and more hash.

#16


MD5没那么容易破的,
MD5只能作为原文的一种保护方式,
比如密码可以用MD5加密后保存在数据库中,验证时把输入的密码经过MD5加密的得到的信息与数据库比较,通过这种方法,密码在数据库中安全可靠,因为保存在数据库中的不是明文,也不担心被破解。

#17


^o^ 正如 wf5360308 所说...

#18


看来确实是不可逆啊~
只有把输入的密码重新用加密方法加密再和数据库的密码进行比较。
可惜不能破啊。

#19


在中国就是这样,搞盗版的还可以大摇大摆的在网上请人帮忙...
这跟直接去撬人家门锁没什么区别的。

#20


楼上的你不是屁话吗?
我在讨论方法就是搞盗版?盗版有这么简单的吗?
还一口一句在中国就是这样,你去过外国?也好意思开这个口。

#21


md5加密是不可逆的,只有把别人的admin再加密一次,得到19-A2-85-41-44-B6-3A-8F-76-17-A6-F2-25-01-9B-12   
再和数据库中的比较,,,,有,就成功,没有就失败... 

md5加密虽然在理论上是可逆的,但是实际应用中还没有实现
如果要利用可逆的加密,最好还是用DES或3DES.
如:
.....................
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Security.Cryptography;

namespace SFClass
{
    public class DESEncryptLib
    {
        public static byte[] DESKey = new byte[] { 0x82, 0xBC, 0xA1, 0x6A, 0xF5, 0x87, 0x3B, 0xE6, 0x59, 0x6A, 0x32, 0x64, 0x7F, 0x3A, 0x2A, 0xBB, 0x2B, 0x68, 0xE2, 0x5F, 0x06, 0xFB, 0xB8, 0x2D, 0x67, 0xB3, 0x55, 0x19, 0x4E, 0xB8, 0xBF, 0xDD };

        public string DESEncrypt(string strSource)
        {
            return DESEncrypt(strSource, DESKey);
        }
        public string DESEncrypt(string strSource, byte[] key)
        {
            SymmetricAlgorithm sa = Rijndael.Create();
            sa.Key = key;
            sa.Mode = CipherMode.ECB;
            sa.Padding = PaddingMode.Zeros;
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, sa.CreateEncryptor(), CryptoStreamMode.Write);
            byte[] byt = Encoding.UTF8.GetBytes(strSource);
            cs.Write(byt, 0, byt.Length);
            cs.FlushFinalBlock();
            cs.Close();
            return Convert.ToBase64String(ms.ToArray());
        }

        public string DESDecrypt(string strSource)
        {
            return DESDecrypt(strSource, DESKey);
        }
        public string DESDecrypt(string strSource, byte[] key)
        {
            SymmetricAlgorithm sa = Rijndael.Create();
            sa.Key = key;
            sa.Mode = CipherMode.ECB;
            sa.Padding = PaddingMode.Zeros;
            ICryptoTransform ct = sa.CreateDecryptor();
            byte[] byt = Convert.FromBase64String(strSource);
            MemoryStream ms = new MemoryStream(byt);
            CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Read);
            StreamReader sr = new StreamReader(cs, Encoding.UTF8);
            return sr.ReadToEnd();
        }




    }
}

#22


MD5不可逆,如果你需要可逆的话用SHA加密吧~

#23


网站上的MD5解密其实是在后台有个数据库,里面存放了很多实际值和相应MD5值的对应表,当你输入一个MD5码的时候,它会从数据库中找出这个码所对应的实际值,而不是去解密这个MD5

#24


看来确实是不可逆啊~ 
只有把输入的密码重新用加密方法加密再和数据库的密码进行比较。 
可惜不能破啊。
=================================
不搞盗版你去破人家加密狗干什么?吃饱撑得慌?

#25


不过如果通过多线程的话,应该在8位以内的纯字母或者数字,应该10分钟就可以重新获取密码了,不过这属于暴力破解了呵呵,建议lz采用2楼上的方法比较妥当

#26


加密分可逆不可逆。
md5不可逆,如果你想实现加密解密可以用DES算法

#27


MD5不可逆,如果你需要可逆的话用SHA加密吧~
------------------------
SHA也不可逆

#28


那么这段代码所加密的md5密码,网上的普通暴力破解工具能破解吗?

#29


引用 14 楼 *8808 的回复:
研究了一下,http://www.xmd5.org/index_cn.htm这个网站的解密的确实是md5,不过是UTF8编码的,而不是LZ的UnicodeEncoding。

C# codeusing System;using System.Text;using System.Security.Cryptography;class Test
{staticvoid Main()
  {string s0="OK";
    Byte[] b0= Encoding.UTF8.GetBytes(s0); 
    Byte[] b1= (new MD5CryptoServiceProvider()).ComputeHash(b0);string s1= BitConverter.ToString(b1).Replace("-",""); 
    Console.WriteLine("{0}: {1}", s0, s1);
  }
}/*
OK: E0AA021E21DDDBD6D8CECEC71E9CF564*/

在网页,http://www.xmd5.org/index_cn.htm中输入“E0AA021E21DDDBD6D8CECEC71E9CF564”然后点“给我转”确实能输出“OK”。但如果用一些不常见的词MD5加密后再传给它,就会输出"Result: not find",可见它是把一些常见的密码明文用MD5加密后保存起来,需要解密时再查表,如果查到,则输出结果,否则“not find”。
我怀疑这个网站是某些黑客收集攻击字典用的。