【问题标题】:MD5 encode and decode [closed]MD5编码和解码[关闭]
【发布时间】:2013-12-05 08:43:03
【问题描述】:

我有一个函数 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(string str_encode) 或向我展示有关不同 MD5_encode(string str_encode) 和 Encrypt(string toEncrypt, bool useHashing) 的详细信息 非常感谢您的帮助:)

【问题讨论】:

  • 你不能“解码”一个 MD5 散列,因为它是一个散列,而不是原始数据的编码表示。
  • 1) MD5 是单向的。没有有效的解码操作。 2)您找到的代码示例是网络上最丑陋的加密示例之一。不知道为什么人们一直在复制它。
  • 你可以告诉我,我如何通过 md5 编码一个字符串
  • @user3050564 - 你需要改变你的问题(或问另一个问题)来告诉你想要做什么,而不是要求“通过 MD5 编码”。您将函数命名为 Something_encode 的事实并没有使该函数实际上进行可逆编码/加密。

标签: c# md5


【解决方案1】:

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

Encrypt 使用 Triple DES 加密输入,使用存储在设置中的值或该值的哈希作为密钥。
去掉 Base64 编码后,可以使用tdes.CreateDecryptor 解密Encrypt 的结果。

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

【讨论】:

  • 你怎么能说不能解密呢? they 是怎么做到的?
  • 你是认真的吗?他们在主页上解释它这个算法是不可逆的[...]我们的工具使用一个巨大的数据库
  • 我提供的link对MD5加密数据进行解密,所以提示MD5不安全。 AES 的选项看起来很聪明。但它正在返回一些中文文本。你能推荐任何解决方案吗?
  • MD5 不是一种加密方法 他们只有一个包含大量(散列、明文)元组的数据库,并允许在其中进行搜索。要加密,请使用 AES 进行对称加密。我不返回“中文文本”,它返回包含二进制数据的内存流,如果您想要文本表示,请使用 Base64 编码或任何其他 ASCII 装甲方法。
【解决方案2】:

虽然 MD5 容易受到许多证明并非如此的攻击,但 MD5 是一种散列方法。哈希被设计为单向的。试想一下,如果当今世界上所有的散列算法都允许任何人轻松地从散列数据中获取原始数据!哎呀!

【讨论】:

    猜你喜欢
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多