暗号化してメールの設定を保存する

ではメールの設定を暗号化しました。パスワードが入力されたとき正しくないと例外が発生してしまいます。そこでパスワードが正しいかどうかチェックをしたいのですが、どうすればいいでしょうか?

EncodeクラスのGetKeyFromPasswordメソッドで生成されるデータをファイルに保存して、パスワードが入力されたときにこれと同じものが生成されるかどうかを調べるという方法がありますが、これによってパスワードが推測されないようにしないといけません。

ハッシュ化するのはどうでしょうか? ハッシュ関数には「MD5」、「SHA-1」、「SHA-256」などがありますが、MD5には特定のハッシュ値を持つ、元のデータを計算されてしまう脆弱性があります。そこでMD5とは別のもの、SHA-256をつかうことを考えます。

少しだけ内容を変えて複数のメールを送信する

にも設定を保存できるように改良を加えます。

Encodeクラス
FormLoadPassクラス
FormSavePassクラスは

暗号化してメールの設定を保存する

と同じです。

Docクラスにフィールド変数 MasterPasswordHashを作成して、マスターパスワードがセットされたらそのハッシュを格納します。ファイルを読み込むときにマスターパスワードがセットされたときもハッシュを生成して、ファイルに保存されているものと比較すれば入力されたパスワードが正しいかどうかわかります。

そのあとコンストラクタ内で引数としてわたされた文字列とデータを暗号化してフィールド変数内に格納しています。ファイルを読み出すときはプロパティをつかって復号されたデータを取得しています。

DataクラスではEncodeDataメソッドとDecodeDataメソッドをつかってフィールド変数の暗号化と復号をおこなっています。

最後に設定ファイルの保存と読み込み、メール送信の処理を示します。