Не очень эффективно.
Кроме того, использование классов sun.misc
дает непереносимое приложение.
Проверьте следующие сравнения производительности из MiGBase64 :
Так что мне интересно, есть ли случай, когда этот алгоритм кодирует 2 очень большие строки и имеет только 1 несовпадение символов (например) в одну и ту же закодированнуюмассивы байтов.
Base64 - это не алгоритм хеширования, это кодировка, и поэтому он должен быть двунаправленным.Столкновения не могут быть допущены по необходимости - иначе декодирование было бы недетерминированным.Base64 предназначен для представления произвольных двоичных данных в строке ASCII.Кодирование строки Unicode в виде Base64 часто увеличивает количество кодовых точек , необходимых, так как для набора символов Unicode требуется несколько байтов.Представление Base64 строки Unicode будет варьироваться в зависимости от используемой кодировки (UTF-8, UTF-16).Например:
Base64( UTF8( "test" ) ) => "dGVzdA=="
Base64( UTF16( "test" ) ) => "/v8AdABlAHMAdA=="
Решение 1
Использовать сжатие без потерь
GZip( UTF8( "test" ) )
Здесь вы конвертируете строку в байтовый массиви использование сжатия без потерь, чтобы уменьшить количество байтов, которые вы должны хранить.Вы можете изменить алгоритм кодирования и сжатия символов, чтобы уменьшить количество байтов в зависимости от строк, которые вы будете хранить (т. Е. Если это в основном ASCII, то UTF-8, вероятно, будет лучшим.
Pros : без коллизий, возможность восстановления исходной строки
Минусы : байт, необходимый для хранения значения, является переменным, байт, необходимый для хранения значения, больше
Solution 2
Использование алгоритма хеширования
SHA256( UTF8( "test" ) )
Здесь вы конвертируете строку в набор байтов фиксированной длины с функцией хэширования. Хэширование является однонаправленным и по своей природе столкновенийможет быть возможным . Однако, основываясь на профиле и количестве строк, которые вы ожидаете обработать, вы можете выбрать хеш-функцию, чтобы минимизировать вероятность коллизий
Плюсы : требуется байтфиксированное значение для хранения; количество байтов, необходимых для сохранения, мало
Минусы : возможны коллизии, восстановление исходной строки невозможно