md5散列混淆

本文关键字:md5 | 更新日期: 2023-09-27 18:28:29

我的公司在将密码存储在数据库中之前使用以下算法对其进行散列:

    public static string Hash(string value)
    {
        byte[] valueBytes = new byte[value.Length * 2];
        Encoder encoder = Encoding.Unicode.GetEncoder();
        encoder.GetBytes(value.ToCharArray(), 0, value.Length, valueBytes, 0, true);
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] hashBytes = md5.ComputeHash(valueBytes);
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < hashBytes.Length; i++)
        {
            stringBuilder.Append(hashBytes[i].ToString("x2"));
        }
        return stringBuilder.ToString();
    }

对我来说,这听起来像是一个微不足道的md5哈希,但当我尝试匹配密码(123456)时,算法会给我ce0bfd15059b68d67688884d7a3d3e8c,当我使用标准md5哈希时,它会给我e10adc3949ba59bbe56e057f20f883e。

该网站的iOS版本正在构建中,用户需要登录,密码将在发送前进行哈希处理。我告诉iOS团队使用标准的md5哈希,但当然没有成功。

我无法解开密码并使用标准的md5再次对其进行哈希(当然),我也不知道iOS团队要得到相同的哈希,具体要做什么。

有什么帮助吗?

md5散列混淆

您需要在两端使用相同的编码(可能是UTF8)。

如果您将代码替换为

byte[] hashBytes = md5.ComputeHash(Encoding.UTF8.GetBytes("123456"));

,您将获得e10adc3949ba59abbe56e057f20f883e

您需要使用UTF8而不是Unicode。以下代码的工作原理与PHP md5()函数完全相同:

    public static string md5(string value)
    {
        byte[] encoded = ASCIIEncoding.UTF8.GetBytes(value);
        MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();
        byte[] hashCode = md5Provider.ComputeHash(encoded);
        string ret = "";
        foreach (byte a in hashCode)
            ret += String.Format("{0:x2}", a);
        return ret;
    }
相关文章:
  • 没有找到相关文章