База данных с проблемой производительности, полностью зашифрованной AES

#c# #encryption #aes

#c# #шифрование #aes

Вопрос:

Мой клиент хочет зашифровать все с помощью AES для защиты информации о клиенте / счете! Я создал .net-приложение с базой данных Mysql (размещено на Hostgator). В принципе, это работает

Мое решение заключается в том, что при запуске приложения .net мы загружаем все данные (~ 12 тыс. строк) для расшифровки и добавляем в кэшированный список. И идея в том, что этот список мы обрабатываем в viewForm, и при обновлении данных мы шифруем данные и обновляем обратно в базу данных Mysql.

Примерно для 5-10 строк обработка, поиск и обновление на сервере выполняются бесперебойно, но после импорта 12 тысяч данных в базу данных возникла проблема, загрузка инициалов при запуске заняла 5-7 часов, и я должен найти решение для этого.

Код для расшифровки:

 Using aesAlg As New AesCryptoServiceProvider()
        aesAlg.Key = Key
        aesAlg.IV = IV

        ' Create a decryptor to perform the stream transform.
        Dim decryptor As ICryptoTransform = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV)

        Using msDecrypt As New MemoryStream()
            Using csDecrypt As New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Write)
                csDecrypt.Write(cipherText, 0, cipherText.Length)
                csDecrypt.FlushFinalBlock()
                'Using srDecrypt As New StreamReader(csDecrypt)
                '    csDecrypt.FlushFinalBlock()
                plaintext = msDecrypt.ToArray
                '    Return plaintext
                'End Using
            End Using
        End Using
    End Using
  

Код для шифрования:

 Using aesAlg As New AesCryptoServiceProvider()
        aesAlg.Key = Key
        aesAlg.IV = IV

        ' Create an encryptor to perform the stream transform.
        Dim encryptor As ICryptoTransform = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV)

        ' Create the streams used for encryption.
        Using msEncrypt As New MemoryStream()
            Using csEncrypt As New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
                csEncrypt.Write(plainText, 0, plainText.Length)
                csEncrypt.FlushFinalBlock()
                encrypted = msEncrypt.ToArray()
            End Using
        End Using
    End Using

    ' Return the encrypted bytes from the memory stream.
    Return encrypted
  

Я использовал для загрузки всего в кэш при запуске (~ 40 свойств x 12 Тыс. строк)

 list = (From p In Entities.Products.ToList() 
Select New Product With {.ProductID = p.ProductID,
  .PROPERTY = p.PROPERTY,
  .PROPERTY = Decrypt(p.PROPERTY),
  .PROPERTY = Decrypt(p.PROPERTY),
  .PROPERTY = Decrypt(p.PROPERTY),
  .PROPERTY = Decrypt(p.PROPERTY),
  .PROPERTY = Decrypt(p.PROPERTY),
  .PROPERTY = Decrypt(p.PROPERTY),
  .PROPERTY = Decrypt(p.PROPERTY),}
  

).ToList()

Кто-нибудь сталкивался с этой проблемой, пожалуйста, дайте мне совет по решению.

Комментарии:

1. Если вы шифруете все данные подобным образом, в базе данных нет смысла.

2. Само шифрование не должно оказывать такого влияния. Вы утверждаете, что у вас нет такой проблемы без шифрования?

3. @gusto2 Да, у нас все в порядке без шифрования. Основная идея заключается в том, что мы получаем 12 тысяч строк за один раз с Entity framework. При выборе нового объекта с помощью {row1 = DecryptFunction(row1), Row2, row3… строка 30}. Все данные в базе данных зашифрованы — это требование.

4. @Slaks: Да, это требования заказчика! Потому что они хранят все конфиденциальные данные внутри.

5. Вы исследовали параметры табличного пространства / прозрачного шифрования, встроенные в MySQL?