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


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

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

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

Author: Scott Arciszewski, 2016-03-29

3 answers

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

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

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

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

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

 2
Author: zaph, 2018-09-27 21:14:38

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

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

 1
Author: Narf, 2016-03-29 08:30:06

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

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

 0
Author: Niet the Dark Absol, 2016-03-29 08:14:49