.net быстрый и безопасный способ шифрования с печатным символьным результатом - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть система, которая получает около 15 миллионов записей каждый день (в отдельных файлах каждый файл содержит около 150 тыс. Записей).система преобразует эти файлы из двоичного файла в ascii, а затем передает данные в несколько последующих систем.Теперь появилось новое требование: нам нужно зашифровать одно из полей (назовем его Поле A) в каждой записи, длина поля A всегда составляет от 6 до 10 цифр.

1. шифрование должно выполняться таким образом, чтобы результат содержал только печатные символы

2. здесь очень важна производительность

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

5. Я читал разные статьи о СОЛТИНГЕ, думаете ли вы, что СОЛТ может бытькакое-нибудь использование в нашем сценарии здесь?

Как вы думаете, какой алгоритм шифрования мне лучше всего использовать здесь?.net Framework обеспечивает реализацию этого алгоритма?

Ответы [ 2 ]

2 голосов
/ 20 сентября 2011

У вас есть две отдельные проблемы:

  • Выбор подходящего алгоритма шифрования для ваших требований безопасности .
  • Представление результата в виде строки для печати.

Последнее легко: используйте Convert.ToBase64String(byte[]).Все известные мне алгоритмы шифрования работают с точки зрения двоичных данных, поэтому вам нужно сначала преобразовать вход в двоичный файл (например, используя Encoding.UTF8.GetBytes(text)), затем шифровать, а затем преобразовать обратно в текст, используя Convert.ToBase64String.Расшифровка - это вопрос использования Convert.FromBase64String, затем применения алгоритма расшифровки двоичного кода к двоичному, а затем обратного преобразования исходного кода (например, Encoding.UTF8.GetString(binary)).

На самом деле вы не предоставили достаточно информации, чтобы определить, какойАлгоритм шифрования, который вы должны использовать - например, симметричный или асимметричный - но засоление обычно включает односторонние хеши, а не обратимое шифрование.Аналогичная концепция в терминах векторов инициализации применима к нескольким алгоритмам шифрования.

0 голосов
/ 20 сентября 2011
  1. Результатом шифрования являются двоичные данные, поэтому вы должны затем преобразовать данные в печатные символы, например, используя base64.

  2. Шифрование не оченьБыстро, и один из компонентов, делающих шифрование более безопасным, состоит в том, чтобы сделать его более сложным, чтобы атаки методом "грубой силы" выполнялись дольше.Таким образом, в основном вы должны выбирать между производительностью и безопасностью.Однако, поскольку данные, которые вы шифруете, очень короткие, скорость не должна быть большой проблемой.

  3. Не следует использовать то, что включено в запись в качестве ключа.Ключ должен быть отправлен отдельно получателю, чтобы его было нелегко найти.

  4. Существуют различные способы обмена ключами , которые можно использовать для проверкичто обе части имеют правильный ключ, и никто другой их не имеет.

  5. Возможно, это зависит от того, какое шифрование вы используете.

Есть шифрованиеалгоритмы, доступные в System.Security.Cryptography namespace , некоторые из них могут быть использованы в вашем сценарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...