Уменьшите длину зашифрованной строки в codeigniter

Когда я пытаюсь зашифровать строку с помощью библиотеки шифрования с помощью CI, возвращаемая строка очень большая, длиной около 178 символов. Есть ли способ уменьшить длину строки.
Шифр по умолчанию: AES-128.

Предположим, что: $data=$this->encryption->encrypt("welcome to ooty");
он возвращает строковое значение длины 178 .. мне нужно, чтобы оно было меньше 20

Обновление: когда я шифрую число, скажем, 6, оно возвращает 178 длинных строк.

10

Решение

Шифрование не уменьшает длину данных.

Длина вывода шифрования AES зависит от режима. Режим потоковой передачи, такой как режим CTR, не изменит длину. Режим блока, такой как ECB или CBC, должен быть дополнен кратным длине блока, но заполнение PKCS # 7 увеличит длину максимум до одного размера блока, 16 байтов для AES.

Это больше, чем просто шифрование байтов. Может использоваться режим, такой как CBC, и IV (длина одного блока) может быть добавлено к зашифрованным данным. Может быть добавлена ​​аутентификация, и это может добавить, возможно, 32 байта. Там может быть получение пароля и соль и количество могут быть добавлены. Наконец, результат может быть закодирован как Base64 или шестнадцатеричный, что увеличит длину соответственно на 33% или 100%.

Возможный случай: «добро пожаловать в ути» — 15 байт. заполнение составляет 1 байт, 32 байта аутентификации, 32 байта соли, 2 байта подсчета, 1 байт версии = 83 байта, кодирование в шестнадцатеричном формате = 166 байт, что близко к 178 байтам, которые вы получаете.

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

2

Другие решения

Вы могли бы использовать другую комбинацию алгоритма шифрования, режима шифрования и алгоритма HMAC, которая добавляла бы меньше служебных данных, но нет — результирующий текст cipherText не будет уменьшен до 20 — один только HMAC приведет к по крайней мере 28 байтов.

Кроме того, судя по вашему описанию («около 178 символов»), сам обычный текст имеет длину более 20 байт … шифрование не является сжатием, вы не можете ожидать, что результирующий cipherText будет иметь меньшую длину, чем обычный текст.

1

Ну, вы могли бы сделать substr($encodedString, 0, 20) но это было бы ОЧЕНЬ ПЛОХАЯ ИДЕЯ ™

Вы значительно уменьшите энтропию зашифрованной строки и, следовательно, безопасность этого шифрования. Это так долго по причине!

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector