web-dev-qa-db-ja.com

ASP.NETでCookieを暗号化する

ASP.NETでCookieを暗号化したいと思います。

私は この記事のメソッド に従いましたが、内部メソッドでリフレクションを使用するという欠点があります。これにより、コードレビューでフラグが付けられました。内部実装が変更される可能性があるため、将来性はありません。

内部メソッドで暗号化を使用する必要のない、同じ機能を持つメソッドはありますか?

.NET Framework 3.5 SP1を使用しています(フレームワークのバージョンを変更できないと仮定)

23
frankadelic

System.Security.Cryptographyにある暗号化 を使用して、機密性の高いCookieの名前と値を暗号化および復号化するのはなぜですか?いくつかのユーティリティ関数を作成して、かなり簡単に管理できます。ユーティリティ関数の例:

private static void SetEncryptedCookie(string name, string value)
{
    var encryptName = SomeEncryptionMethod(name);
    Response.Cookies[encryptName].Value = SomeEncryptionMethod(value);
    //set other cookie properties here, expiry &c.
    //Response.Cookies[encryptName].Expires = ...
}

private static string GetEncryptedCookie(string name)
{
    //you'll want some checks/exception handling around this
    return SomeDecryptionMethod(
               Response.Cookies[SomeDecryptionMethod(name)].Value);
}
20
jball

自分でロールする必要はもうありません。

.Net 4.5にはMachineKey.Protect()MachineKey.Unprotect()があります。

System.Web.Security.MachineKey

.Net 4.0にはMachineKey.Encode()MachineKey.Decode()があります。 MachineKeyProtectionを 'All'に設定するだけです。これらは現在廃止されていますが、4.5を使用している場合は新しいバージョンを使用する必要があります。

ASP.Netの代わりにコンソールアプリなどでこれらを使用すると、アプリを再起動するたびに新しいキーが生成されるようです。私はそれをすばやくチェックしただけですが、ILSpyでは、適切なapp.settingが欠落している場合、独自のデフォルトを生成するように見えます。

ASP.Net以外の同等のものを見つけることができませんでした。

35
mattmanser