Шифрование / дешифрование данных в Vb.net и SQL Server - PullRequest
0 голосов
/ 19 сентября 2019

В настоящее время я использую две функции в приложении 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...