MD5编码和解码

时间:2013-12-05 08:43:03

标签: c# md5

我有一个函数md5_encode

public string MD5_encode(string str_encode)
    {
        MD5 md5Hash = MD5.Create();
        // Convert the input string to a byte array and compute the hash.
        byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(str_encode));

        // Create a new Stringbuilder to collect the bytes
        // and create a string.
        StringBuilder sBuilder = new StringBuilder();

        // Loop through each byte of the hashed data 
        // and format each one as a hexadecimal string.
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }

        // Return the hexadecimal string.
        return sBuilder.ToString();
    }

我无法解码它。我在互联网上搜索并找到类似的东西

public static string Encrypt(string toEncrypt, bool useHashing)
    {
        byte[] keyArray;
        byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);

        System.Configuration.AppSettingsReader settingsReader = new AppSettingsReader();
        // Get the key from config file
        string key = (string)settingsReader.GetValue("SecurityKey", typeof(String));
        //System.Windows.Forms.MessageBox.Show(key);
        if (useHashing)
        {
            MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
            keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
            hashmd5.Clear();
        }
        else
            keyArray = UTF8Encoding.UTF8.GetBytes(key);

        TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
        tdes.Key = keyArray;
        tdes.Mode = CipherMode.ECB;
        tdes.Padding = PaddingMode.PKCS7;

        ICryptoTransform cTransform = tdes.CreateEncryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
        tdes.Clear();
        return Convert.ToBase64String(resultArray, 0, resultArray.Length);
    }

但我不知道代码是否有效,有人帮助我,解码函数MD5_encode(字符串str_encode)或向我显示有关不同MD5_encode(字符串str_encode)和加密(字符串toEncrypt,bool useHashing)的详细信息 任何帮助都需要很多:)

2 个答案:

答案 0 :(得分:4)

MD5_encode使用MD5(cryptographic hash function)生成哈希。该名称具有误导性,因为它不是编码。哈希生成一个独立于输入的固定大小的值,加密哈希特别设计为不可逆。

Encrypt使用Triple DES来加密输入,使用存储在设置中的值或此值的哈希值作为键。
删除Base64编码后,您可以使用tdes.CreateDecryptor解密Encrypt的结果。

PS :3DES已经过时了,你应该使用像AES这样更新的东西了 PS :在很多情况下,ECB是不安全的,至少应该使用随机IV的CBC。

答案 1 :(得分:0)

尽管MD5容易受到许多其他证明的攻击,但MD5是一种散列方法。哈希仅设计为单向。试想一下,如果当今世界上所有的哈希算法都允许任何人轻易从哈希数据中获取原始数据! Eeeeek!