これは、URL の暗号化と復号化に使用できるライブラリです
http://jbtule.github.io/keyczar-dotnet/
ユースケースを考慮して、暗号化された URL を作成し、電子メールで送信します。
この回答のために、暗号化された URL が
"yourdomainname/encrypted/kladsfiopfvnjladsiopdfsipejkadsjsadipodafskl"
暗号化された文字列が、"|" で区切られたフィールド username、dateValidThrough、および emailaddress に復号化できる文字列を表すとします。キャラクター。すなわち
ユーザー名 + "|" + datevalidthrough + "|" 電子メールアドレス
わかりました。暗号化された URL を受け取るには、RouteConfig.cs ルートにルートがあります。
routes.MapRoute(
name: "PaswordReset",
url: "Encrypted/{id}",
defaults: new {controller = "Password", action = "Reset", id = UrlParameter.Optional});
これにより、2つのメソッドを持つこのコントローラーに移動します
public class PasswordController{
public ActionResult Reset(string id){}
//returns a view that has a form for them to enter their username and email
[HttpPost]
public ActionResult Reset(string id, string username, string email){}
//derypt here and verify etc.
}
まず、メールアドレスとユーザー名を入力できるフォームが表示されます。暗号化された URL 部分の非表示フィールドが必要です
フォームを送信したら、暗号化に使用したパスフレーズを使用して ID を復号化します。
ユーザー名と電子メール アドレスが一致していることを確認します。datevalidthrough が < 今日であることを確認してから、パスワードを変更できるようにします。
暗号化された文字列を作成するには、上記のライブラリを使用します。
string plaintext = userName + "|" + DateTime.Today.AddDays(2).ToString() + "|" + userEmailAddress;
WebBase64 ciphertext;
string key = (new Random().Random(10000000) + 1000).ToString();
//pretend this dictionary represents a database storage medium
public static Dictionary<string,string> CypherTextToKey= new Dictionary<string,string>();
//encrypting
using (var encrypter = new Encrypter(key))
{
ciphertext = encrypter.Encrypt(plaintext);
}
CypherTextToKey.Add(cyphertext, key);
SendEmail(user, "Encrypted/"+cyphertext");
それを解読するには、次のようにします
var key = CypherTextToKey[cyphertext]; //get the key from your database
using (var crypter = new Crypter(key)){
var plaintext2 = crypter.Decrypt(ciphertext)
}
すべてが一致する場合は、新しいパスワードなどを提供します。
暗号化された URL を使用してサイト全体を操作する方法がありますが、それは別の話であり、それが必要かどうかはわかりません (もう少し複雑です)。すべての URL を暗号化する場合は、コメントを作成してください。別の回答で返信します。