Что лучший способ состоит в том, чтобы зашифровать очень короткую строку в PHP?

Это связано с добавлением дополнений, чтобы удовлетворить ограничениям выравнивания. Уравнение структуры данных влияет как на производительность, так и на правильность программ:

  • Недопустимый доступ может быть жесткой ошибкой (часто SIGBUS).
  • Неравномерный доступ может быть мягкой ошибкой. Либо исправлено в аппаратном обеспечении, либо для снижения производительности. Или исправлено путем эмуляции в программном обеспечении, для серьезной деградации производительности. Кроме того, атомарность и другие гарантии параллелизма могут быть нарушены, что приводит к незначительным ошибкам.

Вот пример использования типичных настроек для процессора x86 (все используемые 32 и 64-битные режимы):

struct X
{
    short s; /* 2 bytes */
             /* 2 padding bytes */
    int   i; /* 4 bytes */
    char  c; /* 1 byte */
             /* 3 padding bytes */
};

struct Y
{
    int   i; /* 4 bytes */
    char  c; /* 1 byte */
             /* 1 padding byte */
    short s; /* 2 bytes */
};

struct Z
{
    int   i; /* 4 bytes */
    short s; /* 2 bytes */
    char  c; /* 1 byte */
             /* 1 padding byte */
};

const int sizeX = sizeof(struct X); /* = 12 */
const int sizeY = sizeof(struct Y); /* = 8 */
const int sizeZ = sizeof(struct Z); /* = 8 */

Можно минимизировать размер структур путем сортировки (например, структура Z в приведенном выше примере).

ВАЖНОЕ ЗАМЕЧАНИЕ: В стандартах C и C ++ указано, что выравнивание структуры определяется реализацией , Поэтому каждый компилятор может выбрать выравнивание данных по-разному, что приводит к разным и несовместимым макетам данных. По этой причине при работе с библиотеками, которые будут использоваться разными компиляторами, важно понять, как компиляторы выравнивают данные. Некоторые компиляторы имеют параметры командной строки и / или специальные #pragma операторы для изменения настроек выравнивания структуры.

12
задан Shabbyrobe 19 September 2008 в 15:31
поделиться

7 ответов

Я настоятельно рекомендую предложения Chris Kite. Не зная больше о то, что Вы делаете, почему, и угрозы Вы ожидаете должными быть защитить от AES-128, вероятно, достаточно. Способность использовать симметричное шифрование является большой для автономного приложения, которое будет и decryptor и утройством шифрования данных. И как Chris Kite и как Паукообразное насекомое сказали, из-за небольшого размера Ваших данных, рекомендуется, чтобы Вы заполнили данные и использовали случайный Вектор инициализации.

Обновление: Что касается того, почему.... если данные являются достаточно маленькими, и IV может быть предсказан, это возможно к грубой силе простой текст путем генерации шифрованного текста для каждой комбинации простого текста с известным IV и соответствия ему до полученного шифрованного текста. Короче говоря, это - то, как работают таблицы радуги.

Теперь, если бы Вы собираетесь зашифровать на одном сервере, и дешифровать на другом я пошел бы с предложениями pdavis. При помощи асимметричного метода Вы можете разделить ключи шифрования от ключей расшифровки. Таким образом, если сервер, который шифрует данные, поставлен под угрозу, взломщик, все еще не может дешифровать данные.

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

4
ответ дан 2 December 2019 в 06:46
поделиться

Имеет значение, если кто-либо может дешифровать его? Если Вы просто пытаетесь запутать его немного, используйте ROT13. Это - старая школа.

3
ответ дан 2 December 2019 в 06:46
поделиться

Я соглашаюсь с Chris Kite - просто используют AES 128, это далеко достаточно.

Я не знаю точно Вашу среду, но я предполагаю, что Вы передаете данные так или иначе через Интернет.

Не используйте ЕЦБ, это будет всегда приводить к тому же результату для того же простого текста.

Режим CBC является способом пойти и сделать не, забывают случайный вектор инициализации. Этим вектором нужно общаться с шифрованный текст и можно представить ясное.

Относительно Ваших данных, так как AES является блочным шифром, результатом всегда являются несколько из размера блока. Если Вы не хотите сообщать наблюдателю, если Ваши данные коротки или длинны, добавьте некоторое дополнение для расширения их до максимального ожидаемого размера.

2
ответ дан 2 December 2019 в 06:46
поделиться

Если Вы хотите зашифровать и дешифровать данные в рамках приложения, Вы, скорее всего, хотите использовать шифр симметричного ключа. AES, которая является симметричным алгоритмом блочного шифрования, сертифицированным NSA для обеспечения совершенно секретных данных, является Вашим лучшим выбором. Существует чистая Реализация PHP, доступная по www.phpaes.com

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

Выбор правильного алгоритма шифрования является хорошим первым шагом, но существует много факторов к защищенной системе, в которых трудно разобраться, такие как управление ключами. Существуют хорошие ресурсы там, такие как Прикладная Криптография Bruce Schneier и Разработка безопасности Ross Anderson (доступны бесплатно онлайн).

2
ответ дан 2 December 2019 в 06:46
поделиться

Мне нравится использовать GnuPG для чего-либо, что должно быть зашифровано на сервере и затем возможно дешифровало или на сервере или на другом сервере (который обычно является моим случаем). Это допускает дополнительный уровень безопасности с тех пор в моем сценарии, сервер шифрования не имеет ключа для дешифрования данных. Это также допускает более легкое ручное дешифрование. Существует несколько хороших оберток, доступных для различных языков (другое преимущество), один для PHP Класс GnuPGP PHP.

6
ответ дан 2 December 2019 в 06:46
поделиться

mcrypt связан в большинство сборок PHP по умолчанию. Это содержит все примитивы, в которых Вы, вероятно, будете нуждаться. Не зная больше о том, что Вы шифруете, какова Ваша модель угрозы, и т.д., трудно дать конкретные рекомендации на какой алгоритм, режим работы, и т.д. использовать.

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

6
ответ дан 2 December 2019 в 06:46
поделиться

Любой односторонний алгоритм шифрования, такой как Шифр сделает, я предполагаю. Шифр быстр и открыт. Можно использовать Шифр через склеп () функция. AFAIK там не являются никаким алгоритмом шифрования, которые работают особенно хорошо над маленькими строками. Одна вещь знать, хотя то, что принуждение скота такие маленькие строки будет очень легко. Возможно, необходимо зашифровать строку наряду с 'секретным' соленым значением для дополнительной безопасности.

0
ответ дан 2 December 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: