PDA

View Full Version : خطا در دستور select



programerinfonet
یک شنبه 09 تیر 1392, 15:22 عصر
سلام دوستان
من با دستور زیر از دیتابیسم سرچ میزنم و لازمه بگم که اطلاعات داخل جدول encrypt شده هستن
و با همون متد decrypt می کنم اما خط میده میگه متد decrypt اشتباهه

DataSet ds2 = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter("select * from people where pename LIKE '" + sec.Decrypt_Text(txtsearch.Text, "J;") + "'", my_cn);
da.Fill(ds2);
dgv.DataSource = ds2.Tables[0];
dgv.Refresh();

saied_hacker
یک شنبه 09 تیر 1392, 15:42 عصر
این دقیقا چه کلاسی/متدی هست ؟
sec.Decrypt_Text()

programerinfonet
یک شنبه 09 تیر 1392, 15:53 عصر
این دقیقا چه کلاسی/متدی هست ؟
sec.Decrypt_Text()

این متد اینکریپت و دیکریپت منه

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
namespace ChequePrint
{
class Secur
{
public Rijndael RJ = Rijndael.Create();
public MD5CryptoServiceProvider MD = new MD5CryptoServiceProvider();

private byte[] MD5Hash(string Value)
{
return MD.ComputeHash(ASCIIEncoding.ASCII.GetBytes(Value) );
}

public string Encrypt_Text(string Text_TO_Encrypt, string Key)
{
RJ.Key = MD5Hash(Key);
RJ.Mode = CipherMode.ECB;
byte[] To_Encrypt = Encoding.UTF8.GetBytes(Text_TO_Encrypt);
return Convert.ToBase64String(RJ.CreateEncryptor().Transf ormFinalBlock(To_Encrypt, 0, To_Encrypt.Length));
}

public string Decrypt_Text(string Encrypted_Text, string Key)
{
try
{
RJ.Key = MD5Hash(Key);
RJ.Mode = CipherMode.ECB;
byte[] To_Decrypt = Convert.FromBase64String(Encrypted_Text);
return ASCIIEncoding.UTF8.GetString(RJ.CreateDecryptor(). TransformFinalBlock(To_Decrypt, 0, To_Decrypt.Length));
}
catch (Exception)
{
throw new ArgumentException("Input key is invalid!", "Key");
}
}

internal object Decrypt_Text(System.Data.DataRow r, string p)
{
throw new NotImplementedException();
}
}
}

saied_hacker
یک شنبه 09 تیر 1392, 16:11 عصر
درست کار میکنه
یه راهی میگم شاید مسخره باشه و بگی چه ربطی داریه ولی من تو SQLite یه مسئله تا حدودی مشابه داشم که اینجوری رفع شد :

از OleDbComand استفاده کن و مقداری که میخای سرچ کنی رو به عنوان پارامتر بهش بده ...
da.SelectCommand = new OleDbCommand("select * from tb where myC like @pattern", myConn);
da.SelectCommand.Parameters.AddWithValue("@pattern", "'" + s.Decrypt_Text(textBox2.Text, "j;") + "'");

programerinfonet
یک شنبه 09 تیر 1392, 16:20 عصر
این @pattern چی هست ؟
نه نشد
این کد رو نوشتم

da.SelectCommand = new OleDbCommand("select * from people where pename like @pattern", my_cn);
da.SelectCommand.Parameters.AddWithValue("@pattern ", "'" + sec.Decrypt_Text(txtsearch.Text, "j;") + "'");

Mahmoud.Afrad
یک شنبه 09 تیر 1392, 16:22 عصر
مگر اطلاعات داخل دیتابیس انکریپت شده نیستند؟ خب اگر بخواهید جستجو کنید باید محتوای تکست باکس رو انکریپت کنید و در کوئری استفاده کنید، نه اینکه دکریپت کنید!!
دوم اینکه با این روش نمیتونی از Like استفاده کنی چون هیچ تضمینی وجود نداره که داده های خامی که شبیه هم هستند بعد از انکریپت هم شبیه هم باشند.
اگر با لود همه اطلاعات مشکل نداری میتونی لود کنی و بعد دکریپت و بعد like بزنی.

programerinfonet
یک شنبه 09 تیر 1392, 16:50 عصر
یعنی چی ؟
خود اطلاعات رو دکریپت کنم میاد تو دیتاگرید
حالا چه طوری میشه دیتاگرید رو فیلتر کرد ؟
میشه مستقیم از تو خود دیتاگرید جستجو کرد ؟

Mahmoud.Afrad
یک شنبه 09 تیر 1392, 17:46 عصر
بعد از لود اطلاعات و دکریپت کردن میتونی از طریق DefualtView دیتاتیبل رو فیلتر کنی.
مثال:
dt.DefaultView.RowFilter = "Name Like '" + textBox1.Text + "'";