2017-04-21 78 views
1

我是相当新的C#,但是我建立访问奇迹API控制台应用程序,我需要生成API调用一个MD5哈希值。研究了很多之后,我发现,您可以使用System.Security.Cryptography命名空间或Windows.Security.Cryptography.Core命名空间来生成散列。我目前正在尝试使用System.Security.Cryptography命名空间,如下所示:C#Windows.Security.Cryptography.Core参考

public string Hash(string data) 
    { 
     MD5 md5 = MD5.Create(); 
     byte[] toBeHashedBytes = Encoding.ASCII.GetBytes(data); 
     byte[] hash = md5.ComputeHash(toBeHashedBytes); 

     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < hash.Length; i++) 
     { 
      sb.Append(hash[i].ToString()); 
     } 

     return sb.ToString(); 
    } 

此方法生成的哈希传递给惊叹API然而,当是无效的。我试图使用Windows.Security.Cryptography.Core命名空间,但我似乎无法找到需要的引用。我只需要添加一个参考,还是需要首先下载程序集?

我使用Windows 10和Visual Studio 2017年

回答

3

的基本问题是,你是在基地10,而不是十六进制字节相结合。固定append行像这样:

sb.Append(hash[i].ToString("x2")); 

然后,该方法提供了正确的值的

ffd275c5130566a2916217b101f26150

输入 “1abcd1234” 作为在其documentation说明。

+0

谢谢!我知道这是一件非常简单的事情。我绝对需要了解哈希如何工作。 –

+1

大概你想要“x2”,所以当需要的时候写一个前导0。 (也代替“X2”,“X2”消除冗余ToLower将) – bartonjs

+0

@bartonjs是,良好的渔获物。 –

0

Windows.Security.Cryptography.Core是UWP或Windows应用程序命名空间,它不是控制台应用程序。您不能在控制台应用程序中使用它。