![](/img/trans.png)
[英]Length of the data to decrypt is invalid when using AES encryption in ASP.NET C#
[英]How to decrypt an encrypted key from database and use it for fetching data from database in C# asp.net . Encryption is done with AES
事情是,我使用AES加密來加密名為KeyValue的值,並且需要使用該鍵值從數據庫中獲取數據。 當我在btnHide_Click和btnSearch_Click中使用KeyValue時,它沒有被解密,並且我無法使用它從數據庫中獲取圖像和文本字段。 請幫助我如何編寫解密代碼以及在哪里編寫。 我是初學者。 因此,對我而言,了解一下它的完成方式將是一件很棒的事情。 提前致謝 。
我已經使用了此鏈接中給出的加密方法
public partial class _Default : System.Web.UI.Page
{
InsertValue ivo = new InsertValue();
ImageEncryptEntities ctx = new ImageEncryptEntities();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Tab1.CssClass = "Clicked";
MainView.ActiveViewIndex = 0;
}
}
protected void Upload(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
FileUpload1.SaveAs(MapPath("~/Images/" + FileUpload1.FileName));
Image1.ImageUrl = "~/Images/" + FileUpload1.FileName;
}
}
protected void btnSave_Click(object sender, EventArgs e)
{
ivo.Insert(Image1.ImageUrl, TextBox1.Text, txtKeyValue.Text);
Response.Write("Records Saved");
}
protected void btnHide_Click(object sender, EventArgs e)
{
var keystrike = (from p in ctx.tblPhotos
where p.KeyValue.Equals(txtValue.Text)
select p).SingleOrDefault();
try
{
Image1.ImageUrl = keystrike.Picture;
lblMessage.Text = keystrike.Text;
}
catch (NullReferenceException)
{
Image1.ImageUrl = "";
lblMessage.Text = "No key match";
}
}
protected void Tab1_Click(object sender, EventArgs e)
{
Tab1.CssClass = "Clicked";
Tab2.CssClass = "Initial";
MainView.ActiveViewIndex = 0;
}
protected void Tab2_Click(object sender, EventArgs e)
{
Tab1.CssClass = "Initial";
Tab2.CssClass = "Clicked";
MainView.ActiveViewIndex = 1;
}
protected void btnSearch_Click(object sender, EventArgs e)
{
var keystrike = (from p in ctx.tblPhotos
where p.KeyValue.Equals(txtKey.Text)
select p).SingleOrDefault();
try
{
Image2.ImageUrl = keystrike.Picture;
}
catch (NullReferenceException)
{
Image2.ImageUrl = "";
lblMessage.Text = "No key match";
}
}
這是兩個實體框架類GetValue和InsertValue
public class GetValue
{
SqlConnection cnn = new SqlConnection("Data Source=.;Initial Catalog=ImageEncrypt;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");
public SqlDataReader Get(string mstrKeyValue)
{
cnn.Open();
SqlCommand cmd = new SqlCommand("spGetValues", cnn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@KeyValue",mstrKeyValue);
SqlDataReader dr = cmd.ExecuteReader();
return dr;
}
public class InsertValue
{
SqlConnection cnn = new SqlConnection("DataSource=.;InitialCatalog=ImageEncrypt;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework");
public void Insert(string mstrPicture, string mstrText, string mstrKeyValue)
{
cnn.Open();
SqlCommand cmd = new SqlCommand("spInsertValues", cnn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Picture", mstrPicture);
cmd.Parameters.AddWithValue("@Text", mstrText);
cmd.Parameters.AddWithValue("@KeyValue", Encrypt(mstrKeyValue.Trim()));
cmd.ExecuteNonQuery();
}
private string Encrypt(string clearText)
{
string EncryptionKey = "MAKV2SPBNI99212";
byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
}
clearText = Convert.ToBase64String(ms.ToArray());
}
}
return clearText;
}
請顯示此答案
當您插入值時。
cmd.Parameters.AddWithValue("@KeyValue", Encrypt(mstrKeyValue.Trim()));
然后你得到價值
Datatable dt=new Datatable();
string dyc_val=decrypt(dt.rows[0]["encryptvalue"].tostring());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.