ASP.NETでCookieを暗号化したいと思います。
私は この記事のメソッド に従いましたが、内部メソッドでリフレクションを使用するという欠点があります。これにより、コードレビューでフラグが付けられました。内部実装が変更される可能性があるため、将来性はありません。
内部メソッドで暗号化を使用する必要のない、同じ機能を持つメソッドはありますか?
.NET Framework 3.5 SP1を使用しています(フレームワークのバージョンを変更できないと仮定)
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);
}
自分でロールする必要はもうありません。
.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以外の同等のものを見つけることができませんでした。