2013-07-02 16 views
0

我有一對夫婦的方法做一些加密,它總是在我比較值增加了\nSHA256增加了 n爲進值

這是由於一些新的行字符thingy?

public static class Security 
{ 
    public static string CreateHash(this string unHashed) 
    { 
     SHA256CryptoServiceProvider x = new SHA256CryptoServiceProvider(); 
     byte[] data = Encoding.UTF8.GetBytes(unHashed); 
     data = x.ComputeHash(data); 
     return Encoding.UTF8.GetString(data); 
    } 

    public static bool MatchHash(this string hashData, string hashUser) 
    { 
     if (hashUser == hashData) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

我輸入值到一個文本框和運行CreateHash()輸入數值到另一個文本框(所有測試)。然後我從另一個文本框中運行我的比較檢查。

protected void btn_dehash_Click(object sender, EventArgs e) 
{ 
// get value entered and hash it 
var matchPass = txt_password.Text.CreateHash(); 

// populate lbl with true or false 
lbl_Name.Text = txt_hashed.Text.MatchHash(matchPass) ? "true" : "false"; 
} 

我從MD5得到的結果是可以的,因爲這個結果要短得多。我想使用更安全的方法,所以我使用SHA256,這是我從比較中得到的結果。

SHA256 Results

有誰知道爲什麼發生這種情況?

+0

不要使用''==比較字符串,但是'.equals()' –

回答

5

不要把哈希變成一個字符串!保持它作爲一個字節數組。

散列表示字節的序列,其可以是或可以不是有效的UTF-8。

如果你想有一個可讀的哈希然後做類似的東西:

byte[] hash = x.ComputeHash(bytes); 
    string hashString = string.Empty; 
    foreach (byte x in hash) 
    { 
     // Turn each byte into it's hex equivalent (00 to FF). 
     hashString += String.Format("{0:x2}", x); 
    } 
    return hashString; 

或者,作爲意見建議,使用基地64編碼。

+0

如果你想有一個字符串,base64編碼,以及你會被罰款。 –