Метод шифрования для создания строки меньшего размера в Java

Я хочу зашифровать и расшифровать некоторую строку длиной от 300 до 1000 символов. Я собираюсь сохранить эти зашифрованные значения в файлах cookie. Поэтому я хочу знать, могут ли какие-либо доступные API-интерфейсы шифрования, которые генерируют зашифрованные строки меньшего размера, иметь ту же или меньшую длину, чем фактическая строка.

Спасибо.


person Aryan    schedule 28.05.2015    source источник
comment
почему бы просто не объединить алгоритм шифрования и сжатия (сначала я бы рекомендовал сжатие)?   -  person Paul    schedule 28.05.2015
comment
Просто чтобы быть уверенным, вы говорите о шифровании, поэтому вы хотите восстановить открытый текст из зашифрованного текста, верно?   -  person Artjom B.    schedule 28.05.2015
comment
да. Я хочу сохранить эту зашифрованную информацию в файле cookie, а затем получить ее для дальнейшего использования.   -  person Aryan    schedule 28.05.2015


Ответы (2)


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

person Juris Lacis    schedule 31.05.2015

Симметричное шифрование — это общее средство, с помощью которого вы можете зашифровать сообщение в открытом виде (открытый текст) в его зашифрованный эквивалент (зашифрованный текст) и расшифровать обратно, используя ключ, называемый закрытым ключом. Тот, у кого есть ключ, сможет выполнять эту операцию туда и обратно (отсюда и слово «симметричный»). Это, как вы знаете, сильно отличается от кодирования/декодирования, где не используется закрытый ключ, и для декодирования достаточно знать алгоритм кодирования. (например, База 64).

Похоже, у вас есть дополнительное требование: зашифрованный текст должен быть короче, чем открытый текст. Можно использовать некоторые методы сжатия, но это сложно и, возможно, нецелесообразно в вашем случае использования. В общем, если вы используете утилиту SymmetricEncryption, такую ​​как эту (реальный код, попробуйте с Java 8), вы убедитесь, что зашифрованный текст длиннее, чем зашифрованный текст (не то, что вам нужно).

Наконец, это решение может быть сложным для вашего варианта использования. Если я правильно понимаю, вы хотите идентифицировать сеанс HTTP с некоторой информацией. Если вы храните эту информацию в файле cookie, да, вам нужно будет защитить эту информацию, чтобы ваше решение было не менее безопасным, чем сам файл cookie. Но в таких случаях вы используете хранилище на стороне сервера для сеанса, а не хранилище файлов cookie. Посмотрите, как это делается, например, с помощью Rails. Что-то подобное должно быть доступно в Java. Таким образом, то, что вы сохраняете в файле cookie, является «ссылкой» на конфиденциальные данные, а конфиденциальные данные хранятся на стороне сервера (который, предположительно, так же безопасен, как и весь сервер).

person Kedar Mhaswade    schedule 31.05.2015