【问题标题】:How to create persistent unique MD5 hash如何创建持久唯一的 MD5 哈希
【发布时间】:2013-04-03 13:00:03
【问题描述】:

我想如果我使用默认的 MD5 函数,那将在不同的应用程序中为相同的字符串创建相同的哈希

所以我想以某种方式定义一个 pre static 值,将其提供给 MD5 函数,并使这些生成的结果使我的应用程序独一无二。

这个静态值在我的应用程序中永远不会改变,所以它总是会为我的应用程序中的相同字符串生成相同的哈希值

但是如果另一个应用程序使用默认的 MD5,他们将不会得到相同的 MD5 哈希值

如何使用 c# 5 做到这一点? asp.net

下面是我的功能

public static string ConvertStringtoMD5(string strword)
{
    MD5 md5 = MD5.Create();
    byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(strword);
    byte[] hash = md5.ComputeHash(inputBytes);
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < hash.Length; i++)
    {
        sb.Append(hash[i].ToString("x2"));
    }
    return sb.ToString();
}

【问题讨论】:

  • 我们能问一下为什么你想这样做吗?答案很可能会影响采取的最佳方法。
  • 另外请注意,如果机器已配置为强制执行 FIPS,则 MD5 调用将生成异常。看看 SHA。
  • 是的,我也可以使用 SHA 没关系。
  • +1 到@AlexK。提到加盐,类似的原理,但主要用于密码存储。

标签: c# hash md5 unique


【解决方案1】:

为您的应用程序创建一个唯一的 GUID,将其添加到您想要散列的数据(在散列之前),然后执行散列。

它仍然是一个 MD5 哈希,并且对于您的应用程序来说是唯一的。

如果您以后需要验证哈希,请务必添加与以前相同的 GUID。

    private const string _myGUID = "{C05ACA39-C810-4DD1-B138-41603713DD8A}";
    public static string ConvertStringtoMD5(string strword)
    {
        MD5 md5 = MD5.Create();
        byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(_myGUID + strword);
        byte[] hash = md5.ComputeHash(inputBytes);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < hash.Length; i++)
        {
            sb.Append(hash[i].ToString("x2"));
        }
        return sb.ToString();
    }

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 2015-01-05
    • 2017-05-04
    • 2015-02-19
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多