2012-01-10 7 views
0

プレーンテキストファイルのユーザー名とパスワードから[書き込みを読む]がデータを保護するには悪い方法ですが、他にも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

+0

ハッシュは_not_暗号化です –

+0

私の用語を修正しました。これは依然として質問者のための良い解決策です。 – carlossless

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メソッドを使用してパスワードの塩を生成することができます。 SOのこの種のことをカバーする他にもたくさんの質問があります。

関連する問題