0

我尝试了解在 asp.net MVC 中的加密

很难理解。。

有人可以给我一个简单的例子来在 asp.NET MVC 中使用加密吗?

我尝试让简单的应用程序在 asp.net mvc 中使用加密。我读了一些关于加密的文章来参考。但没有一篇文章显示如何使用 asp.net mvc 3 或 4 加密数据或查询

can some one give me reference about encrypt in asp.net mvc 3 / 4 or give me some simple example of encrypt..
4

1 回答 1

1

这是您可以用来加密和解密您的网址的库 http://jbtule.github.io/keyczar-dotnet/

给定您的用例,您将创建加密的 url 并将其发送到电子邮件中

为了这个答案,让我们假装加密的网址是

“你的域名/加密/kladsfiopfvnjladsiopdfsipejkadsjsadipodafskl”

假设加密后的字符串表示一个字符串,可以解密为字段 username、dateValidThrough 和 emailaddress,用“|”分隔 字符。IE

用户名+“|” + datevalidthough + "|" 电子邮件地址

好的,所以要接收加密的 url,你的 RouteConfig.cs 路由中有一个路由

        routes.MapRoute(
            name: "PaswordReset",
            url: "Encrypted/{id}",
            defaults: new {controller = "Password", action = "Reset", id = UrlParameter.Optional});       

这会将他们带到这个有两种方法的控制器

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 来操作整个站点,但那是另一回事,我不确定这是否是您需要的(它有点复杂)。如果您想加密每个网址,请发表评论,我会用另一个答案回复您。

于 2013-06-14T05:45:23.420 回答