2

リモート Web サイトにログインできるプログラムを作成しようとしています。複数のアカウントを持っている人のために、簡単にアカウント データを保存できるようにしていますIsolatedStorage。私のコードの現在の状態では、パスワードは単に入力TextBoxされ、保存されるとすぐに MD5 ハッシュに変換されます。

これを適切なコードにリファクタリングしたいのですが、行き詰まりました。

Aは、およびPasswordBoxを介してデータを公開します。PasswordBox.SecureStringPasswordBox.Password

したがって、保存ボタンをクリックすると、次のようなことを実行します

public void OnClick(...)
{
    var password = passwordBox.Password;
    // store it somehow (e.g. custom MD5 encryption)

    var savePassword = passwordBox.SecureString;
    // store this string somehow, but how?
}

ここで私の質問

  • プレーン パスワードを に入力するとすぐにPasswordBoxvar passwordメモリに何かが表示されますか? 一部のハッカーは、リフレクション/デバッグを通じてこの単純な値を可視化できますか? これらの文字列を実際に表示するコードはどれですか? そして、私は何を認識する必要がありますか?
  • の扱い方SecureStringPasswordBox

私はこれらすべてに少し圧倒されており、アプリケーションでパスワードを適切に処理する方法の本質をまだ理解できていません。

私は、ソリューション全体と実行中のコードを求めているわけではありません。誰かが私を始めてくれるなら、私はただうれしいです. また、エンタープライズ ソリューションは必要ありません。実装が簡単で、労力をできるだけ節約できるものを探しているところです。

4

1 に答える 1

1

パスワードを元に戻すことが本当に必要ですか?

保存するより安全な方法は、塩漬けしてハッシュすることです。

ユーザー:JOHN

パスワード: (で始まる)myUserPassword667!

次に、DB 内のユーザーに対してある種のデータベース固有のコードを使用します。GUIDとしましょう。

これabcd-1234-12-1212121abで、JOHN の一意指定子として

これで基本パスワードができました(ハッシュ前)

myUserPassword667!abcd-1234-12-1212121ab

System.Security名前空間の SHA またはその他のハッシュ アルゴリズムのいずれかを使用して、これをハッシュできるようになりました。

これで、内部的にハッシュアルゴリズムに適用するソルトがいくつかあります...(コードの一部のみ)

MySecretSaltWords559BC

次に、結果をBase64またはバイナリとしてDBに保存します。

Ab09l\311sas==(簡体字)

次にユーザーがログオンすると、DB でレコードが見つかります。アカウントを生成したときに使用した一意のコードを取得し、入力したパスワードに添付します。

入力したパスワードを同じ手法でハッシュし、結果をバイナリ比較すると、パスワードを保存する必要はありません。ハッシュが一致しない場合は、同じパスワードを持っていません。

于 2013-03-03T14:35:24.313 に答える