title: What is the difference between using MD5.Create and MD5CryptoServiceProvider?
body: <p>In the .NET framework there are a couple of ways to calculate an MD5 hash it seems, however there is something I don't understand; </p>
  
  <p>What is the distinction between the following? What sets them apart from eachother? They seem to produce identical results:</p>
  
  <pre><code>    public static string GetMD5Hash(string str)
      {
          MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
          byte[] bytes = ASCIIEncoding.Default.GetBytes(str);
          byte[] encoded = md5.ComputeHash(bytes);
  
          StringBuilder sb = new StringBuilder();
          for (int i = 0; i &lt; encoded.Length; i++)
              sb.Append(encoded[i].ToString("x2"));
  
          return sb.ToString();
      }
  
      public static string GetMD5Hash2(string str)
      {
          System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
          byte[] bytes = Encoding.Default.GetBytes(str);
          byte[] encoded = md5.ComputeHash(bytes);
  
          StringBuilder sb = new StringBuilder();
          for (int i = 0; i &lt; encoded.Length; i++)
              sb.Append(encoded[i].ToString("x2"));
  
          return sb.ToString();
      }
  </code></pre>