Как заранее определить длину результирующего зашифрованного текста, полученного в операции шифрования? - PullRequest
2 голосов
/ 13 июня 2009

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

Операция шифрования состоит из использования класса / алгоритма .NET RijndaelManaged, а затем преобразования в строку Base64 перед хранением.

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

Спасибо

Ответы [ 2 ]

6 голосов
/ 13 июня 2009

Выход Rijndael имеет тот же размер, что и вход, округленный до ближайшего кратного размера блока (обычно 128 битов, или 16 байтов). Base64 расширяет свой ввод до своего вывода на 4/3 - требуется 4 байта вывода, чтобы представить каждые 3 байта ввода.

Таким образом, если у вас есть, например, вход 70 байтов, шаг шифрования будет производить 80 байтов вывода (кратное 16, что> 70), Base64 превратит это в 108 (81/3 4).

1 голос
/ 13 июня 2009

Зашифрованный текст будет первым размером блока шифра, кратным вашему тексту. Вы проверяете свойство Algorithm BlockSize . Чистая кодировка Base64 увеличивает выходные данные на треть, но это может варьироваться, если вам также необходимо экранировать URL (кодировать в процентах) определенные символы Base64 (например, '+' и '/').

...