2012-01-10 154 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方法可用于为您的密码生成盐。关于这类事情,还有很多其他问题。