При следующих условиях:
Код: Выделить всё
$s = Crypt::encryptString('a');
Контекст< /h2>
Хранилище базы данных — необходимо хранить зашифрованное значение, и хотелось бы установить проверку входной строки, чтобы входная строка самой длинной длины в зашифрованном виде вставлялась в базу данных без усечения.
Хранилище базы данных — необходимо хранить зашифрованное значение и хотелось бы установить проверку входной строки, чтобы входная строка самой длинной длины в зашифрованном виде вставлялась в базу данных без усечения.
Хранилище базы данных. p>
Базовые тесты
Выполнение некоторых очень грубых тестов локально с использованием следующего фрагмента:
Код: Выделить всё
Route::get('/test', function() {
echo '';
for ($i=0; $i < 100; $i++) {
$s = str_repeat('a', $i);
$l1 = strlen($s);
$l2 = strlen(Crypt::encryptString($s));
echo "$l1$l2";
}
echo '';
});
Значит, должна быть формула. Я видел выходной_размер = входной_размер + (16 - (input_size % 16)), но не учитывает дисперсию.
Вывод
Код: Выделить всё
0 192
1 188
2 188
3 192
4 188
5 188
6 188
7 192
8 192
9 188
10 188
11 192
12 192
13 192
14 192
15 192
16 220
17 220
18 216
19 216
20 220
Хорошо, после беседы с @Luke Joshua Park ниже, разница в длине связана с функцией шифрования Laravel и способом $iv Создается , представляющий собой случайные байты, которые могут содержать /.
Код: Выделить всё
$value
Когда значения, содержащие /, закодированы в формате JSON, / экранировался в \\\/, добавляя по 3 символа в каждом экземпляре.
Настоящая проблема — могут ли $iv и $value содержать более одного '/'?
Подробнее здесь: https://stackoverflow.com/questions/547 ... ption-meth