Максимальная длина пароля, который может быть зашифрован - PullRequest
0 голосов
/ 26 марта 2019

Я использую алгоритм PBEWithMD5AndDES для шифрования пароля.Мне нужно хранить зашифрованный пароль в столбце БД.Исходя из длины пароля, я должен определить длину столбца в БД.Я хочу знать, какой может быть максимальная длина пароля, который может быть зашифрован с использованием упомянутого алгоритма.

1 Ответ

2 голосов
/ 26 марта 2019
  1. Если это пароль для доступа к чему-либо в вашей системе, вам вообще не следует хранить его в зашифрованном виде, вместо этого следует хранить необратимый и медленный хешиногда маскируется под PBKDF (функция получения ключа на основе пароля).Это обеспечивает гораздо лучшую безопасность, что является оффтопом для SO, но много раз обсуждалось тысячи раз на security.SX и в несколько меньшей степени на crypto.SX.См. https://security.stackexchange.com/questions/211/how-to-securely-hash-passwords для канонических и многих ссылок.

  2. Если вам действительно нужно хранить зашифрованные, PBEwithMD5andDES не является безопасным.Любое значение, которое вы храните в зашифрованном с помощью этого алгоритма, может быть легко дешифровано компетентным злоумышленником за считанные часы, а может и за секунды, поэтому вряд ли стоит затратить усилия на шифрование.

  3. Те, кто ответили, ответили на единственный вопрос, который вы задали: нет никаких ограничений на размер данных, которые могут быть небезопасно зашифрованы с помощью этого алгоритма.Как и все экземпляры Java Cipher, он использует структуру init, update, doFinal, и хотя язык Java ограничивает размер byte[] аргументов, передаваемых или возвращаемых за один вызов, до чуть менее 2 ^ 31 (около 2 100 000 000) байтов, вы можетесделать любое количество звонков.(Для шифров secure существуют некоторые ограничения на размер данных, в зависимости от алгоритма и режима, чтобы оставаться безопасными, но поскольку этот код небезопасен для начала, он ничего не теряет, превышая размеры данных, которыеможет снизить безопасность.)

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

    OTOH, так как вы хотите сохранить результат в базе данных, там почти наверняка будет некоторое ограничение.Даже если нет архитектурного ограничения или не существует эффективного ограничения, каждая база данных в конечном счете ограничена размером диска или эквивалентного хранилища, которое она может использовать, и общий объем всего хранилища в центрах обработки данных (по общему признанию, не все) оценивается приближается к 2 000 000 000 000 000 000 байтов .

...