#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?