3

アプリケーションのさまざまな形式でアクセスできる変数が必要です。

この変数にパスワードを保存したいと思います。この変数を定義する最善の方法を知りたいですか? デリゲートを通して?

CSP? (しかし、非対称キーの CSP ですよね?) 分離されたストレージですか? または Program.cs の静的クラスなどのメソッド:

static class Data
{
    public static string Value { get; set; }
}

ArtMoney のように、私のプロセスにアクセスできるトロイの木馬から身を守りたいので、これをお願いします :)

4

3 に答える 3

5

あなたはすでにこれを知っていると思いますが、確認のためにもう一度言います:同じマシン上で実行されているトロイの木馬からアプリを保護することはできません. あなたは彼らにとってそれを難し​​くすることができます。

とはいえ、SecureStringクラスは、パスワードが (暗号化されていない) メモリ内にできるだけ短く存在することを保証するため、別のプロセスがその情報を抽出するのが難しくなります。

SecureString に格納された値を読み取ることは、独自のアプリケーションであってもそれほど簡単ではないことに注意してください。これを行う方法の例は、この記事にあり、BSTR に変換されます。

IntPtr bstr = Marshal.SecureStringToBSTR(password);

try
{
    // ...
    // use the bstr
    // ...
}
finally
{
    Marshal.ZeroFreeBSTR(bstr);
}

文字列は意図的にマネージド文字列に変換されません。これは、ガベージ コレクトされるまで暗号化されずにマネージド メモリ内に残ります。正しい方法は、たとえばMarshal.ReadByte. 例はこの記事にあります。

于 2013-11-14T15:14:15.290 に答える
0

SecureStringクラスを確認する必要があります。パスワードをメモリに安全に保存することになっています。

于 2013-11-14T15:16:13.917 に答える