2014-02-23 150 views
2

乾草有我想要散列Windows Phone的一個字符串的MD5 ......但是當我調用MD5類我得到以下錯誤MD5哈希中的WindowsPhone 8

The type or namespace name 'MD5' could not be found (are you missing a using directive or an assembly reference?)

PS:我已經使用System.Security.Cryptography名稱空間
所以我怎樣才能在Windows Phone中使用MD5哈希? 這裏是我的代碼

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Security.Cryptography; 

namespace FluoraPin 
{ 
    class HASHING 
    { 
     public static string GetMd5Hash(MD5 md5Hash, string input) 
     { 

      // Convert the input string to a byte array and compute the hash. 
      byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input)); 

      // Create a new Stringbuilder to collect the bytes 
      // and create a string. 
      StringBuilder sBuilder = new StringBuilder(); 

      // Loop through each byte of the hashed data 
      // and format each one as a hexadecimal string. 
      for (int i = 0; i < data.Length; i++) 
      { 
       sBuilder.Append(data[i].ToString("x2")); 
      } 

      // Return the hexadecimal string. 
      return sBuilder.ToString(); 
     } 

     // t verify md5 hashing 
     private bool VerifyMd5Hash(MD5 md5Hash, string input, string hash) 
     { 
      // Hash the input. 
      string hashOfInput = GetMd5Hash(md5Hash, input); 

      // Create a StringComparer an compare the hashes. 
      StringComparer comparer = StringComparer.OrdinalIgnoreCase; 

      if (0 == comparer.Compare(hashOfInput, hash)) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
    } 
} 
+2

沒有答案,但:我假設你知道MD5壞了? –

+0

nooop我不知道!謝謝你建議什麼? – a3adel

+0

使用[SHA-256](http://en.wikipedia.org/wiki/SHA-256),可通過['SHA526Managed'類](http://msdn.microsoft .COM/EN-US /庫/ WindowsPhone的/開發/ system.security.cryptography.sha256managed(v = vs.105)的.aspx)。 [另一個SO問題的答案](http://stackoverflow.com/a/1756222/1810429)提供了一個如何在C#中用SHA256Managed進行散列的例子。 – J0e3gan

回答

-4

我沒有測試您的解決方案,但我發現,我工作得很好的解決方案。

using System.Security.Cryptography;

class MD5Hash 
{ 
    public String getHash(String input) 
    { 
     MD5 md5 = System.Security.Cryptography.MD5.Create(); 
     byte[] inputBytes = Encoding.ASCII.GetBytes(input); 
     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(); 
    } 

    public Boolean VerifyHash(String input, String hash) 
    { 
     String hashOfInput = getHash(input); 

     StringComparer comparer = StringComparer.OrdinalIgnoreCase; 

     if (0 == comparer.Compare(hashOfInput, hash)) 
      return true; 
     else 
      return false; 
    } 
} 

這會出現亂碼的字符串,完全沒有錯誤。

此外,您收到錯誤,請檢查您是否正在編譯包含文本「客戶端配置文件」的.Net版本。

我是新來的,所以如果我得到了這個完全錯誤的,那麼我很抱歉你能對你提出更具體的問題。

+0

System.Security.Cryptography.MD5在windows phone上不可用 –

2

我想答案是正確的錯誤:

The type or namespace name 'MD5' could not be found (are you missing a using directive or an assembly reference?)

MD5不在System.Security.Cryptography命名爲Windows Phone的一類。請參閱MSDN's System.Security.Cryptography page for Windows Phone進行確認。

將此與MSDN's general System.Security.Cryptography page,對比,其中將MD5列爲命名空間中的類。

話雖如此,你應該真的使用SHA-256或更高版本而不是MD5或SHA-1哈希。

SHA-256 hashing可用於Windows Phone 7和8到SHA256Managed類 - 在您已使用的Security.Security.Cryptography名稱空間中。有關如何使用SHA256Managed的示例,請參閱answer to a related SO question

+1

但我需要MD5來簽名API查詢 –

+0

這是一個非常明顯的答案。如何試圖解決這個問題? –