2011-12-25 14 views
2

どのようにSQLデータベースにパスワードを格納すると、ユーザーの入力パスワードを変換する必要がありますか?テキストボックスからパスワードを保存しようとしましたが、データベースに空白/ヌルを保存した形式でパスワードモードにしました。パスワードモードを無効にすると、テキストが正常に動作します。SQL Serverにパスワードを格納および取得する方法は?

+0

意味のある回答を得るために十分な情報がありません。いくつかのコード、SQL、テーブル定義などを投稿できますか?今後何らかの理由でパスワードが必要な場合は、 – RickNZ

+0

を他の2ウェイアルゴリズムで暗号化してください。パスワードではなく、表示する必要のある秘密の文字列だった場合の例.... – tgkprog

+0

@tgkprogありがとう! – Rembo

答えて

2

暗号化された形式でパスワードを保存することは良い方法です。あなたはそれを暗号化するためにmd5ハッシュアルゴリズムを使用することができます。ここでは何の疑いがある場合は、文字列

using System; 
using System.Text; 
using System.Security.Cryptography; 

// Create an md5 sum string of this string 
static public string GetMd5Sum(string str) 
{ 
// First we need to convert the string into bytes, which 
// means using a text encoder. 
Encoder enc = System.Text.Encoding.Unicode.GetEncoder(); 

// Create a buffer large enough to hold the string 
byte[] unicodeText = new byte[str.Length * 2]; 
enc.GetBytes(str.ToCharArray(), 0, str.Length, unicodeText, 0, true); 

// Now that we have a byte array we can ask the CSP to hash it 
MD5 md5 = new MD5CryptoServiceProvider(); 
byte[] result = md5.ComputeHash(unicodeText); 

// Build the final string by converting each byte 
// into hex and appending it to a StringBuilder 
StringBuilder sb = new StringBuilder(); 
for (int i=0;i<result.Length;i++) 
{ 
    sb.Append(result[i].ToString("X2")); 
} 

// And return it 
return sb.ToString(); 
} 

あなたは、通常の文字列に暗号化されたテキストをバック元に戻すことはできません。..

連絡先をハッシュするためのサンプルコードです。

+0

返信ありがとうMeherzad、sb.Append(result [i] .ToString)の "x2"の動作は何ですか? (「X2」)); ? – Rembo

+0

各バイトを16進数に変換するために使用されます。 – Zlatan

0

一般的に、いや、それは(少なくとも私の経験に応じて)それを変換する必要はないが、より多くのセキュリティ上の理由から、一部のユーザーは、暗号化/復号化メソッドを使用するか、base64でに変換し、最善の方法がありますハッシュ

のような一方向のアルゴリズムアリ

0

私はあなたがデータバインドされたコントロールのいくつかのタイプを使用していると仮定しています。

私はonInsertingイベントを作成し、いくつかの変数にtbPassword.text値を割り当て、パスワードは最初の変数に代入されている場合、デバッグを参照します。これは、データベースに直接ハッキングして誰かを偽装できないようにするために、パスワードをハッシュ化して暗号化する場所でもあります。

あなたが背後にあるコードでパスワード値を保存している場合は、あなたが上からonInserting工程を追加スキップすることができ、ちょうどそこに値を調べます。

あなたはまた、ストアドプロシージャを使用して保存されている場合は、パラメータをプリントアウトし、あなたがウェブサイトから渡された値と、それを実行して現れるかを確認したい場合があります。

0

私はあなたのパスワードをひそかし、データベースに保存し、一般的に、我々は、データベース内の

プレーンテキストを保存していない、と私たちは、パスワードを暗号化する必要があるべきであると考えています。データベース設計のために

ユーザーがinputedとき私たちは、二つのフィールド暗号文とDataTableのキーを追加する必要がありますパスワード

プログラムは、パスワードを暗号化する必要があり、その後、を保存暗号文をdatatableに暗号化します。

ユーザーが再度ログオンするので、Cipherテキストを等しいかどうか比較するだけでOKです。

以下のコードを参照できます。

/// <summary> 
    /// Encrypts the specified hash algorithm. 
    /// 1. Generates a cryptographic Hash Key for the provided text data. 
    /// </summary> 
    /// <param name="hashAlgorithm">The hash algorithm.</param> 
    /// <param name="dataToHash">The data to hash.</param> 
    /// <returns></returns> 
    public static string Encrypt(HashAlgorithm hashAlgorithm, string dataToHash) 
    { 

     var tabStringHex = new string[16]; 
     var UTF8 = new System.Text.UTF8Encoding(); 
     byte[] data = UTF8.GetBytes(dataToHash); 
     byte[] result = hashAlgorithm.ComputeHash(data); 
     var hexResult = new StringBuilder(result.Length); 

     for (int i = 0; i < result.Length; i++) 
     { 
      //// Convert to hexadecimal 
      hexResult.Append(result[i].ToString("X2")); 
     } 


return hexResult.ToString(); 
} 


/// <summary> 
/// Determines whether [is hash match] [the specified hash algorithm]. 
/// </summary> 
/// <param name="hashAlgorithm">The hash algorithm.</param> 
/// <param name="hashedText">The hashed text.</param> 
/// <param name="unhashedText">The unhashed text.</param> 
/// <returns> 
/// <c>true</c> if [is hash match] [the specified hash algorithm]; 
/// otherwise, <c>false</c>. 
/// </returns> 
public static bool IsHashMatch(HashAlgorithm hashAlgorithm, 
    string hashedText, string unhashedText) 
{ 
    string hashedTextToCompare = Encrypt(
     hashAlgorithm, unhashedText); 
    return (String.Compare(hashedText, 
     hashedTextToCompare, false) == 0); 
} 
関連する問題