0

私はこれまでパスワードを暗号化したことがありません。これは、この記事の助けを借りて、私がそれを行うために思いついたものです。記事には塩が含まれていなかったので、私はそれを自分で理解する必要がありました:

        UTF8Encoding encoder = new UTF8Encoding();
        byte[] salt = new byte[8];
        new Random().NextBytes(salt);
        byte[] encodedPassword = encoder.GetBytes(txtPassword.Text);
        byte[] saltedPassword = new byte[8 + encodedPassword.Length];
        System.Buffer.BlockCopy(salt, 0, saltedPassword, 0, 8);
        System.Buffer.BlockCopy(encodedPassword, 0, saltedPassword, 8, encodedPassword.Length);
        byte[] encryptedPassword = new MD5CryptoServiceProvider().ComputeHash(saltedPassword);
        byte[] saltedEncryptedPassword = new byte[8 + encryptedPassword.Length];
        System.Buffer.BlockCopy(salt, 0, saltedEncryptedPassword, 0, 8);
        System.Buffer.BlockCopy(encryptedPassword, 0, saltedEncryptedPassword, 8, encryptedPassword.Length);

データベースにsaltedEncryptedPassword保存されます。お気づきかもしれませんが、ソルトが関係している場所でバイト配列を連結するのに問題がありました。私はこれを正しく行いましたか、それとももっと良い方法がありますか?ありがとう。

4

4 に答える 4

6

パスワードハッシュは、高速ではなく低速である必要があります。
ハッシュが高速であるほど、攻撃者はパスワード辞書をより高速に実行できます。

したがって、パスワードにSHAのような汎用ハッシュを使用しないでください。

代わりに、scryptやPBKDF2などの実績のある遅いテクニックを使用してください。

于 2012-05-06T15:28:52.927 に答える
0

私は、salt値とハッシュ(saltedencryptedPasswordではない)のみをデータベースの別々の列に格納し、入力したパスワードを使用してハッシュを再生成します。ここで同様の答えが見つかります。C#のハッシュパスワードとソルトパスワード1 `

ソルト値としてGUIDを使用し、ハッシュする前にそれをパスワードに追加することがあります。

MD5はもはや安全ではありません(2004年に中国人によってハッキングされました)。代わりにSHA256またはSHA512を使用できます。編集:ただし、これらのアルゴリズムは計算が非常に高速であるため、ハッキングが容易です。@SLaksは、計算がはるかに難しいため、scryptまたはPBKDF2を使用することをお勧めします。Rfc2898DeriveBytesの下の.NETにPBKDF2の組み込み実装があります。

もう1つのポイント:毎回新しいRandom()オブジェクトを作成するわけではありません。シード値は時間ベースであるため、これを短時間で呼び出すと、毎回同じ乱数シーケンスが生成されます。

于 2012-05-06T15:13:51.003 に答える
-1

いいえ、それは良くありません。MD5はもうダメです。それはそれ自体と衝突し、信頼されません。SHA256を使用する必要があります。

public string getSHA256(string input)
{
    try
    {
        return BitConverter.ToString(SHA256Managed.Create().ComputeHash(Encoding.Default.GetBytes(input))).Replace(“-”, “”).ToLower();
    }
    catch (Exception e)
    {
        return string.Empty;
    }
}
于 2012-05-06T15:10:45.717 に答える
-1

パスワードのハッシュには常にSHA2-512を使用します。私の意見では、パスワードは決して暗号化されるべきではなく、常にハッシュ化されるべきです(元のパスワードにさかのぼる方法はありません)。

ただし、最近ではパスワードに簡単に変換できるMD5は使用しないでください。

于 2012-05-06T15:15:16.447 に答える