我有一个加密的数据库,我正在使用this帖子上由CraigTP完成的StringCipher对其进行加密。
但是,当我尝试搜索数据库时,无法使用解密的值进行搜索,因为我加密的每个值都是不同的,所以对搜索值进行加密并将其与数据库进行匹配是没有用的。现在,我正在解密列表,并尝试将搜索值与此解密后的列表进行匹配,但是仍然无法显示结果。但是,如果我搜索直接从数据库中获取的加密值,则会得到结果。我已经尝试了所有我能想到的东西,但没有想法。
这是我的索引方法:
public ViewResult Index(string sortOrder, string searchString)
{
ViewBag.CurrentSort = sortOrder;
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "Username" : "";
ViewBag.CurrentSort = sortOrder;
var Users = from s in db.Users
select s;
foreach(User element in Users)
{
element.Username = StringCipher.Decrypt(element.Username.ToString());
element.Password = StringCipher.Decrypt(element.Password.ToString());
}
if (!String.IsNullOrEmpty(searchString))
{
Users = Users.Where(s => s.Username.Contains(searchString));
}
switch (sortOrder)
{
case "Username":
Users = Users.OrderByDescending(s => s.Username);
break;
}
return View(Users.ToList());
}
这是我的索引视图:
@model IEnumerable<EncryptTest.Models.User>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm())
{
<p>
Find by name: @Html.TextBox("SearchString")
<input type="submit" value="Search" /></p>
}
<table class="table">
<tr>
<th>
@Html.ActionLink("Username", "Index", new { sortOrder = ViewBag.NameSortParm })
</th>
<th>
Password
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Username)
</td>
<td>
@Html.DisplayFor(modelItem => item.Password)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.ID_User}) |
@Html.ActionLink("Details", "Details", new { id = item.ID_User }) |
@Html.ActionLink("Delete", "Delete", new { id = item.ID_User })
</td>
</tr>
}
</table>