1

http://www.asp.net/learn/videos/video-189.aspxのコードに基づいてac#プロジェクトでカスタムMemberShipProviderを使用していますが、何らかの理由で、その方法がわかりません。ユーザーパスワードを復号化してログインを検証すると、パスワード値の前に8文字が追加されます(例:䝉ビデオ嘗㳪畕锬password)。

「暗号化された」passwordFormatを使用し、UnEncodePasswordのメソッドは次のとおりです。

private string UnEncodePassword(string encodedPassword)
{
    string password = encodedPassword;
    password = Encoding.Unicode.GetString(DecryptPassword(Convert.FromBase64String(encodedPassword)));

    return password;
}

ありがとう!

4

3 に答える 3

6

「䝉慣嘗㳪畕锬」はですか?(更新しました)

サーバーのweb.configまたはその他には、「milkshake」などのソルト値があります。ユーザーが「TheYard」のようなパスワードを入力すると、ソルトを追加して「milkshakeTheYard」を暗号化します。彼らがログインするとき、あなたは彼らの要求にソルトを追加し、それを暗号化された文字列と比較します。

それで、塩のポイントは何ですか?暗号化されたパスワードが悪用された場合、「TheYard」はわずか7文字であるため、RainbowTableで簡単に検索できます。塩を加えることによって、あなたはこのプロセスをはるかに難しくします。

ソルト自体はほとんどセキュリティを提供しませんが、組み合わせて使用​​すると、簡単に実装できる追加のレイヤーが提供されます。

于 2010-02-08T17:02:33.857 に答える
4

パスワードを復号化できないようにする必要があります。ユーザーが入力したパスワードを暗号化し、保存されている暗号化されたパスワードと比較する必要があります。パスワード回復では、ランダムな1回限りのパスワードを生成し、ユーザーが最初に使用するときにパスワードを変更するように強制する必要があります。

于 2010-02-09T12:53:06.503 に答える
2

それを見つけた!パスワードを取得するには、復号化されたencodedPassword変数から16バイトのソルトを差し引く必要があります。

private string UnEncodePassword(string encodedPassword)
{
    string password = encodedPassword;
    byte[] bytesIn = Convert.FromBase64String(encodedPassword);
    byte[] bytesRet = DecryptPassword(bytesIn);
    password = System.Text.Encoding.Unicode.GetString(bytesRet, 16, bytesRet.Length - 16);

    return password;
}

塩についての手がかりをくれたイアンに感謝します!

于 2010-02-09T12:43:30.373 に答える