如何在asp.net中加密查询字符串

时间:2015-09-03 19:08:04

标签: c# asp.net encryption

我有一个包含可以动态添加的超链接的GridView。这是我的.aspx代码。

<asp:GridView ID="TeamGrid" runat="server" AutoGenerateColumns="False" HeaderStyle-BackColor="#337AB7" HeaderStyle-ForeColor="White" CssClass="table table-condensed" CellPadding="4" ForeColor="#333333" GridLines="None" Width="350px">
  <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    <Columns>
      <asp:HyperLinkField DataTextField="Team" DataNavigateUrlFields="Team_ID" DataNavigateUrlFormatString="Team.aspx?Team_ID={0}" HeaderText="Team" ItemStyle-Width="250">
        <ItemStyle Width="250px"></ItemStyle>
      </asp:HyperLinkField>

      <asp:BoundField DataField="Position" HeaderText="Position" ItemStyle-Width="150">
        <ItemStyle Width="150px"></ItemStyle>
     </asp:BoundField>
   </Columns>
</asp:GridView>

这是我向网格添加数据的方式。

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Team_ID"), new DataColumn("Team"), new DataColumn("Position") });

foreach(Team team in UserTeams)
{
    if (team.Leader_ID.Equals(UserID)) //check whether user is the leader of the team.
    {
        dt.Rows.Add(team.Team_ID, team.Team_Name, "Leader");
    }
    else
    {
        dt.Rows.Add(team.Team_ID, team.Team_Name, "Member");
    }
}
TeamGrid.DataSource = dt;
TeamGrid.DataBind();

TeamGrid是Grid的ID。 团队是一个对象。

我想隐藏/加密我使用URL发送的参数。 (参数-Team_ID)并在结果页面中解密。 (Team.aspx) 我怎样才能做到这一点? (我是asp.net和C#的新手)

1 个答案:

答案 0 :(得分:0)

如果您的目标是阻止人们猜测查询字符串中的Team_ID参数,则不应使用Team_ID,因为查询字符串无法有效加密,如果您使用Team_ID的Identity db值,则可以轻松猜测够了。

您可以在Team对象/表中创建一个名为“Team_Key”的新字段。 Team_Key将是一个随机字符串,始终是唯一的。每次创建Team对象时,确保获得唯一Team_Key的好方法是通过这样做......

team.Team_Key = Guid.NewGuid().ToString();

然后,您需要使用Team_Key替换代码中对Team_ID的所有引用,例如

DataNavigateUrlFormatString="Team.aspx?Team_ID={0}"

...变为

DataNavigateUrlFormatString="Team.aspx?Team_Key={0}"

你的网格数据绑定和Team.aspx代码隐藏显然也需要更新。