【问题标题】:Odd way of implementing the MD5 function in C#在 C# 中实现 MD5 函数的奇怪方式
【发布时间】:2010-06-28 08:11:13
【问题描述】:

我一直在寻找扩展方法,偶然发现了一个声称模仿 PHP 如何执行 MD5 函数的函数。这是一个精确的副本(我不明白为什么 Crypto 的声明和初始化是分开完成的......)

public static string MD5(this string s) {
    MD5CryptoServiceProvider provider;
    provider = new MD5CryptoServiceProvider();
    byte[] bytes = Encoding.UTF8.GetBytes(s);
    StringBuilder builder = new StringBuilder();

    bytes = provider.ComputeHash(bytes);

    foreach(byte b in bytes) {
        builder.Append(b.ToString("x2").ToLower());
    }

    return builder.ToString();
}

MSDN 库显示了这样做的方法:

byte[] MD5hash (byte[] data) {
   // This is one implementation of the abstract class MD5.
   MD5 md5 = new MD5CryptoServiceProvider();

   byte[] result = md5.ComputeHash(data);

   return result;
}

除了参数是字符串之外,字符串生成器和附加每个字节的需要是什么?如果我只是对字符串执行 Encoding.UTF8.GetBytes,我应该有一个字节数组,可用于 MSDN 库中的方法。

谁能指出扩展方法的用途?

【问题讨论】:

    标签: c# extension-methods md5


    【解决方案1】:

    第一种方法返回结果的十六进制编码。后者返回它有一个byte[],而没有将其编码为字符串中的十六进制。

    在将结果作为字符串(可能是 URL、表单等)返回时,前者更像是一种方便的方法。

    【讨论】:

    • +1 并且第一种方法也将十六进制字符串作为参数而不是字节数组。
    【解决方案2】:

    整个 stringbuilder 是一种将字节转换为十六进制字符串的方法(例如,将 16 个字节转换为 32 个字符)。请参阅How do you convert Byte Array to Hexadecimal String, and vice versa?,了解完成相同任务的各种其他方法。

    【讨论】:

      猜你喜欢
      • 2012-06-23
      • 1970-01-01
      • 2013-05-28
      • 2021-06-28
      • 2021-04-07
      • 2016-01-15
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多