2012-01-10 197 views
0

am從純文本文件的用戶名和密碼[寫入閱讀],但它是一種保護數據的不好方法,是否有其他方法可以做到這一點,很可能是通過使用IV的加密解密算法。保護客戶端數據安全

回答

0

您可以使用SHA1等哈希編碼您的密碼。

Function getSHA1Hash(ByVal strToHash As String) As String 

    Dim sha1Obj As New Security.Cryptography.SHA1CryptoServiceProvider 
    Dim bytesToHash() As Byte = System.Text.Encoding.ASCII.GetBytes(strToHash) 

    bytesToHash = sha1Obj.ComputeHash(bytesToHash) 

    Dim strResult As String = "" 

    For Each b As Byte In bytesToHash 
     strResult += b.ToString("x2") 
    Next 

    Return strResult 

End Function 

使用它很簡單!

Console.Write(getSHA1Hash("password")) 

所以每當你需要驗證用戶身份,你可以把他輸入密碼,請使用上面的函數計算它的哈希,並確保它是一個簡單的IF子句相同:

if getSHA1Hash(input_password) = HASHED_OLD_PASSWORD then Authenticate() 

如果沒有純粹的暴力破解所有可能性,SHA1哈希是不可解密的,所以它是一個非常安全的解決方案。

+0

感謝mindw0rk,偉大的方法來解決我的問題,標題來實現你的結果:-) – sarepta 2012-01-10 19:21:37

+0

哈希是_not_加密 – 2012-01-31 04:45:08

+0

修復了我的術語。儘管這對於提問者來說仍然是一個很好的解決方案。 – carlossless 2012-02-03 09:34:39

1

您需要決定是否需要重新解密文本。我會建議,至少對於密碼來說,你可以使用單向散列。如果你使用鹽,你可以使蠻力攻擊散列很困難。理想情況下,應爲每個密碼使用一個單獨的隨機鹽:password + salt = hash。您需要存儲salt以及hash,但它可以以純文本形式存儲,因爲它不是密碼保密的。一個示例實現(使用SHA256):

public class SHA256 
{ 
    public static string GetHash(string password, string salt) 
    { 
     UTF8Encoding encoder = new UTF8Encoding(); 
     SHA256Managed sha256 = new SHA256Managed(); 
     byte[] hashedDataBytes = sha256.ComputeHash(encoder.GetBytes(salt + password)); 
     return ByteArrayToString(hashedDataBytes); 
    } 


    /// <summary> 
    /// Generates a random 16 character alpha-numeric salt 
    /// </summary> 
    /// <returns></returns> 
    public static string GenerateRandomSalt() 
    { 
     const string allowedChars = "ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; 
     char[] chars = new char[16]; 
     var rd = new Random((int)DateTime.Now.Ticks); 

     for (int i = 0; i < 16; i++) 
     { 
      chars[i] = allowedChars[rd.Next(0, allowedChars.Length)]; 
     } 

     return new string(chars); 
    } 

    /// <summary> 
    /// Converts supplied byte array to hex format string. 
    /// </summary> 
    /// <param name="inputArray"></param> 
    /// <returns></returns> 
    private static string ByteArrayToString(byte[] inputArray) 
    { 
     StringBuilder output = new StringBuilder(""); 

     for (int i = 0; i < inputArray.Length; i++) 
     { 
      output.Append(inputArray[i].ToString("X2")); //Return in hex format 
     } 
     return output.ToString(); 
    } 
} 

GenerateRandomSalt方法可用於爲您的密碼生成鹽。關於這類事情,還有很多其他問題。