Входная строка, сжатая как строка

Я хочу сжать / преобразовать строку как новую строку.

то есть: строка ввода:

USERNAME/REGISTERID

строка вывода после сжатия:

<some-string-in-UTF8-format>

строка вывода после распаковки:

USERNAME/REGISTERID

Есть какой-нибудь метод сжатия или хеширования для этого преобразования?

Я предпочитаю какое-то решение с использованием Java или алгоритма с основными этапами процесса.

Я уже читал и пытаюсь использовать преобразование Хаффмана, но сжатый вывод состоит из байтов исходящей кодировки UTF-8.


person Community    schedule 29.09.2009    source источник


Ответы (5)


Взгляните на Base64, commons-codec и т. д.

Commons-code предоставляет очень простой класс Base64 использовать.

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

person Community    schedule 29.09.2009
comment
На самом деле хеш-функции односторонние. Спасибо! И прошлое - person Andre Pastore; 29.09.2009
comment
@matt: для этой цели можно использовать хеш-функцию, даже если это односторонняя функция, вам просто нужно сохранить в некоторой постоянной структуре (база данных, файл, что угодно) на стороне сервера обратную строку соответствия, используемую в ключах для пользователя / registerid ... хорошо, если вы сделаете это таким образом, это могут быть даже случайно выбранные числа или строки. - person kriss; 12.03.2010

Вы можете использовать ZipOutputStream .

    ByteArrayOutputStream result = new ByteArrayOutputStream();
    new ZipOutputStream(result).write("myString".getBytes());
    byte[] bytes = result.toByteArray();

Вам просто нужно выяснить правильную кодировку строки. В этом случае можно использовать представление Base64 .

person Community    schedule 29.09.2009

См. iconv и _ 1_. Для кодирования, возможно, рассмотрите base64_encode.

person Community    schedule 29.09.2009

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

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

person Community    schedule 29.09.2009
comment
У меня нет базы данных ключей. Сжатие предназначено не для уменьшения передачи данных, а для простого и наивного обфускации исходных данных. Спасибо и прошлое - person Andre Pastore; 29.09.2009

Похоже, кто-то просит вас скрыть комбинации имени пользователя и пароля. Это, вероятно, не лучшая идея, поскольку предполагает безопасность там, где ее нет. Вы также можете реализовать для этого шифрование ROT13 и использовать для дешифрования двойной ROT13.

person Community    schedule 29.09.2009