【问题标题】:MD5 hash in silverlightSilverlight 中的 MD5 哈希
【发布时间】:2010-11-17 15:50:24
【问题描述】:

我正在开发一个 Windows phone 7 应用程序。我在silverlight 中使用this implementation 进行MD5 散列。

我正在使用此代码 -

    protected string GetMD5Hash(string input)
    {
        byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
        MD5Managed md5 = new MD5Managed();
        byte[] hash = md5.ComputeHash(bs);

        StringBuilder sb = new StringBuilder();
        foreach (byte b in bs)
        {
            sb.Append(b.ToString("x2").ToLower());
        }

        return sb.ToString();    
    }

但是,对于我提供的输入,我没有得到正确的 MD5 哈希值。我不确定这段代码有什么问题。如果有人在silverlight 中使用this implementation 进行MD5 哈希,你知道我哪里出错了吗?

【问题讨论】:

  • 请注意,MD5 现在很可能被认为已过时 - 它不安全。我建议使用 SHA 系列的实现。
  • 为什么你认为这是错误的?你拿什么来比较?您链接到的页面上有 cmets 说它有问题,不应该使用
  • @Mr.失望我正在使用第 3 方 API,所以这真的不能由我来决定。
  • @Matt Lacey 是的,我看到了那些 cmets。但是当我寻找替代品时,除了自己从头开始做之外,我没有找到其他任何东西。许多线程,甚至在stackoverflow中都建议了这个实现。我怎么知道它错了?通常,MD5 哈希表示为 32 个十六进制数字的序列,但对于某些输入,我得到了更多。
  • 我在 Windows Phone 7 应用程序上找不到 MD5Managed。

标签: c# silverlight windows-phone-7 md5


【解决方案1】:

您返回的是 输入 的十六进制版本,而不是哈希:

foreach (byte b in bs)

应该是

foreach (byte b in hash)

(如果您不介意使用 Base64 而不是十六进制,则另一种方法是使用 Convert.ToBase64String(hash)。)

【讨论】:

【解决方案2】:

对此已经有一个公认的答案,但对于在 Silverlight 或 Windows Phone 中使用 MD5 的其他人,我发布了一个指向 MD5 的another implementation 的链接,我已经取得了更大的成功。

我花了几个小时在原帖中提到的实现上碰壁,试图让它在我的 Windows Phone 项目中运行。它在某些情况下有效,但在其他情况下无效。

Jeff Wilcox 的版本运行良好。

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2019-04-24
    • 2011-06-18
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多