В настоящее время я использую две функции в приложении VB.net для шифрования / дешифрования конфиденциальных данных (например, SSN).Затем я храню зашифрованные данные в базе данных SQL Server.Затем при чтении данных с SQL Server приложение расшифровывает их для отображения.Это прекрасно работает.
Проблема этого решения в том, что оно делает невозможным написание простых SQL-запросов, включающих эти зашифрованные поля, поскольку возвращаемые данные зашифрованы.Я хочу иметь возможность выполнять запросы, которые возвращают данные, которые были сохранены в зашифрованном формате, в исходном формате (то есть фактические, незашифрованные данные).
Каков наилучший метод для достижения этой цели?Должен ли я не использовать функции в приложении VB.net, а использовать, например, функции в SQL Server?Или мне нужно создать DLL или что-то такое, что имеет две вышеупомянутые функции, которые мне нужно как-то «установить», чтобы их можно было вызывать из SQL Server?Я использую SQL Server 2008 и Visual Studio 2017.
На случай, если это уместно, я включил код для функций.
Private key() As Byte = {}
Private IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF}
Public Function Decrypt(ByVal sStringToDecrypt As String, _
ByVal sEncryptionKey As String) As String
Dim inputByteArray(sStringToDecrypt.Length) As Byte
Try
key = System.Text.Encoding.UTF8.GetBytes(Left(sEncryptionKey, 8))
Dim des As New DESCryptoServiceProvider()
inputByteArray = Convert.FromBase64String(sStringToDecrypt)
Dim ms As New MemoryStream()
Dim cs As New CryptoStream(ms, des.CreateDecryptor(key, IV), _
CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Dim encoding As System.Text.Encoding = System.Text.Encoding.UTF8
Return encoding.GetString(ms.ToArray())
Catch ex As Exception
Return ex.Message
End Try
End Function
Public Function Encrypt(ByVal sStringToEncrypt As String, _
ByVal SEncryptionKey As String) As String
Try
key = System.Text.Encoding.UTF8.GetBytes(Left(SEncryptionKey, 8))
Dim des As New DESCryptoServiceProvider()
Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes( _
sStringToEncrypt)
Dim ms As New MemoryStream()
Dim cs As New CryptoStream(ms, des.CreateEncryptor(key, IV), _
CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Return Convert.ToBase64String(ms.ToArray())
Catch ex As Exception
Return ex.Message
End Try
End Function