2011-01-21 2 views
2

У меня есть сценарий, где мне нужно сериализовать структуру в байтовый массив или строку, зашифровать ее и затем сохранить в таблице SQL.Какой лучший симметричный поставщик шифрования .net для размера?

Проблема в том, что эта таблица может работать в миллионы строк, и поэтому размер имеет важное значение.

Я использую BinaryFormatter для сериализации в байт [], преобразовывая его в Ascii, а затем сжимая его с помощью RijndaelManaged провайдера.

До шифрования строка составляет около 230 байт. Почтовое шифрование - более 600 байт.

Кто-нибудь знает, сможет ли кто-либо из других поставщиков криптографии лучше справиться с этим? Или, если действительно есть лучший способ, которым я должен заниматься этим?

Большого спасибо заранее,

Z

+0

который RDBMS? .... –

+0

@Mitch, как же это отношение? – Amy

+0

Почему и как вы преобразовываете двоичные данные в ASCII? – bdonlan

ответ

1

В целом, алгоритмы шифрования только добавить фиксированную нагрузку (для IV и, в случае асимметричных алгоритмов шифрования, зашифрованный симметричный ключ). Если вы видите увеличение в 2 раза, это означает, что вы делаете что-то до или после шифрования, что увеличивает размер данных.

Я бы удалил преобразование ascii - алгоритмы шифрования отлично работают с необработанными двоичными данными - и убедитесь, что вы храните в базе данных как необработанный двоичный код, а не base64-ing или аналогичный. Если у вас все еще есть проблемы, отправьте код, который вы используете.

+0

Эй, большое спасибо за это. Вы абсолютно правы (но, к сожалению, у меня недостаточно «статуса», чтобы отметить вас как такового!). Кроме того, я не видел вашего сообщения, прежде чем я опубликовал его несколько часов назад. Извини за это. –

+0

@zaaaaphod, вы сейчас делаете :) – bdonlan

1

Я нашел проблему.

Я сделал несколько вещей 1/остановил использование .net-сериализации. Я замечаю, что сериализованный контент включает в себя информацию о сборке (например, культура, версия и т. Д.) С каждым объектом. Это даже делает это, когда вы переопределяете ISerializable и «сворачиваете свой собственный». Я могу понять, зачем это нужно для повторной сериализации ... но я не хочу хранить это в каждой строке. Вместо этого я только что построил строку с разделителями и преобразовал ее в массив байтов. Я «сериализую» себя.

2/Я перестал пытаться преобразовать байт [] в строку (с каким-то кодированием) до шифрования. Теперь я просто передаю байт [] в риджиндал.

3/Я начал использовать varbinary в таблице и записываю зашифрованный результат в виде сырых байтов. Это кажется намного более эффективным, чем попытка использовать какую-то кодировку.

Итак, у меня есть окончательный, зашифрованный продукт примерно до 150 байт. Большое улучшение! ... Кроме того, я еще не пробовал сжимать его.

Спасибо за помощь народов :-)

Z

Смежные вопросы