Может ли шифрование с использованием RijndaelManaged создать пробелы в выводе? - PullRequest
0 голосов
/ 01 сентября 2011

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

Я знаю, что шифрование создает некоторые не алфавитно-цифровые символы, но ограничены ли они не пробелами?

Ответы [ 2 ]

4 голосов
/ 01 сентября 2011

Большинство алгоритмов шифрования - включая Rijndael - работают с двоичными данными, а не текстом. В двоичных данных нет понятия пробела (или не алфавитно-цифрового символа).

Если вы должны хранить зашифрованные данные в виде текста, вам необходимо сначала преобразовать их из двоичных данных (например, байтового массива) в текст. Один простой способ сделать это - использовать Base64 (например, Convert.ToBase64String(data)) - и Base64 никогда не включает пробелы, использующие стандартный кодабет.

Итак, подведем итог

  • Если возможно, хранить зашифрованные данные в двоичном виде (например, в поле ИЗОБРАЖЕНИЕ)
  • Если у вас есть для его хранения в текстовом поле, преобразуйте его соответствующим образом, например, используя Base64. Не использовать что-то вроде Encoding.UTF8, поскольку зашифрованные данные не UTF-8-кодированный текст.
  • Base64 не содержит пробелов, поэтому этот аспект не должен быть для вас проблемой.
1 голос
/ 01 сентября 2011

Rinjdael и, в более общем смысле, каждый алгоритм шифрования может создавать пробелы в своем выводе.Возможно, вы захотите закодировать эти двоичные данные таким образом, чтобы исключить пробелы, если это действительно необходимо.Тем не менее, я предлагаю вам просто сохранить данные, как это возможно.Многие СУБД предоставляют поддержку двоичного хранилища: например, SQL Server поддерживает тип данных varbinary .

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