Ответ Аффе кажется хорошим, но поскольку ваш вопрос показывает некоторые проблемы с пониманием, вот несколько общих слов:
У меня есть строка "0443"
, длина которой равна 4. Если я это сделаюКодировка с UTF, это изменит длину?
Нет кодировки "UTF".UTF обозначает формат преобразования Unicode (или UCS) и представляет собой семейство кодировок:
- UTF-8 кодируетстрока в различном количестве 8-битных единиц (байтов).ASCII-строка, такая как
"0443"
, будет закодирована в 4 байта, каждому символу вне ASCII требуется более одного байта (до четырех). - UTF-16 кодирует строку вразличное количество 16-битных блоков (двухбайтовых).Наиболее распространенные символы кодируются в одном таком блоке, но есть некоторые (в принципе, больше, чем единичные, но менее часто используемые), которым требуется два таких блока.
- UTF-32 (или UCS-4) кодирует строку в 32-битных единицах (четверных байтах).Каждому символу здесь нужно 4 байта.
Для UTF-32 и UTF-16 важен порядок байтов внутри каждого юнита, поэтому существуют две общие версии (Big Endian и Little Endian),Иногда метка порядка байтов будет добавлена к закодированному тексту, если порядок байтов (или, возможно, кодировка вообще) может быть неизвестен получателю сообщения.(Для UTF-8 порядок байтов фиксирован.)
Java делает это, если для кодирования используется UTF-16
, поэтому вы получите еще два байта.Вместо этого используйте UTF-16BE
или UTF16LE
, который не добавляет этот байт.
О вашей криптографии :
Обычно плохая идея - использовать простоестрока типа "12345678"
непосредственно в качестве криптографического ключа.Таким образом, вы получите (при условии только десятичных цифр) только log_2 (10 ^ 8) ~ 26,6 бит энтропии вместо 128 бит, возможных для 128-битного ключа.Испытание всех возможных ключей этой формы будет выполнено в считанные секунды.
Использование вектора инициализации зависит от режима работы .Вы используете CBC-режим, где вектор инициализации должен быть случайным (даже не частично предсказуемым, прежде чем будет решен открытый текст).Фиксированный вектор инициализации делает ваше шифрование еще более слабым.
Либо используйте случайный ключ, либо, если вы должны использовать пароль, используйте более длинный пароль и хэшируйте его с некоторой солью (и большим количеством итераций), дляпример с PBKDF2 или bcrypt , чтобы сгенерировать ключ.(Соль может быть отправлена вместе с сообщением или сгенерирована из параметров, таких как имена ваших партнеров по коммуникации, просто что-то различное для каждого использования.)
Если вы генерируете свой ключ, вы также можетесгенерируйте IV из тех же данных (но затем убедитесь, что используете разные соли для каждого сообщения).В противном случае сгенерируйте случайный вектор инициализации и отправьте его с каждым сообщением.(Он не должен быть секретным, просто случайным.)
Кроме того, вы должны объединить свое шифрование с кодом аутентификации сообщения , в противном случае вы открыты для атак с использованием выбранного шифротекста на CBC-режим.