您好我可以为指定的字符串执行加密和解密并保存到数据库中。但我想搜索Data.But无法搜索加密列的数据。有任何办法。在前面我使用AES,下面的方法用于加密。
private string Encrypt(string Text)
{
string EncryptionKey = "abcdef@123";
byte[] clearBytes = Encoding.Unicode.GetBytes(Text);
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();
}
Text = Convert.ToBase64String(ms.ToArray());
}
}
return Text;
}
以下方法用于解密
private string Decrypt(string Text)
{
string EncryptionKey = "abcdef@123";
byte[] cipherBytes = Convert.FromBase64String(Text);
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.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(cipherBytes, 0, cipherBytes.Length);
cs.Close();
}
Text = Encoding.Unicode.GetString(ms.ToArray());
}
}
return Text;
}
任何人都可以根据这个来帮助我..,
答案 0 :(得分:0)
我不相信有 - 这是加密方式的一部分。
如果字符串具有搜索到的某些特征,例如嵌入其中的名称,则可以计算名称的SOUNDEX值并将其存储在单独的列中。然后,您可以根据名称的soundex值进行搜索,这将减少返回的行数,然后对其进行解密并进行搜索。至少你不必拉下整张桌子。 当然,这样做可能是一个安全漏洞......
干杯 -
答案 1 :(得分:0)
我认为,您需要创建SQL CLR数据库项目并使用
创建一个函数解密逻辑并在SQL Query中调用。您将能够搜索加密数据。