Зашифровать массив как строку - PullRequest
0 голосов
/ 08 мая 2009

Я ищу двусторонний алгоритм шифрования для кодирования массива в виде строки, чтобы можно было безопасно хранить некоторые данные в файле cookie. Алгоритм должен не просто взорвать массив, я хочу, чтобы он тоже был запутан. Мои данные содержат все печатные символы.

Достаточно ссылки на что-то, я просто не могу ничего найти в Google. Может быть, я должен просто взорвать массив каким-нибудь непонятным символом, а затем как-то его зашифровать? Я не уверен, каким способом его зашифровать ... хотя он не слишком защищен, данные cookie не , что чувствительно.

Ох ... да, алгоритм шифрования должен позволить мне использовать ключ / соль. mcrypt_encrypt, кажется, возвращает грязные длинные результаты, но, возможно, я не использую правильный шифр. Какой самый простой шифр (создает короткие чистые строки)?

Ответы [ 7 ]

9 голосов
/ 08 мая 2009

serialize () получит вашу информацию из массива в строку - и вы можете передать ее через base64_encode () , если вы просто хотите запутать, - но не безопасность.

Если вам нужна безопасность - посмотрите на mcrypt и blowfish: пример blowfish

Относительно mcrypt

Внимание! Эта функция УСТАРЕЛА с PHP 7.1.0. Надеется эта функция крайне не рекомендуется.

6 голосов
/ 08 мая 2009

Основываясь на ответе gnarf, это должно сработать:

function encode_arr($data) {
    return base64_encode(serialize($data));
}

function decode_arr($data) {
    return unserialize(base64_decode($data));
}

На всякий случай, если кому-то еще понадобится решение для копирования и вставки.

4 голосов
/ 08 мая 2009

Используйте serialize () , чтобы преобразовать массив в строку, и unserialize (), чтобы превратить его в массив. Это намного лучше взрыва и ручного разбора. Для простой обфускации (которую может увидеть любой программист) вы можете использовать простую кодировку base64, но вы действительно должны заглянуть в библиотеку mcrypt , чтобы обеспечить реальную безопасность.

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

Вы говорите в своем комментарии, что это cookie-файл "запомнить меня", так что речь идет об аутентификации. В этом случае не храните ничего чувствительного в массиве. Просто храните соленый хеш и используйте его. Например, ваш файл cookie может содержать имя пользователя и соленый хеш (хэш пароля базы данных + диапазон IP-адресов). Когда пользователь заходит на сайт, прочитайте cookie и создайте хеш из информации в вашей базе данных. Если он совпадает с хешем в куки, войдите в него автоматически. Если нет, удалите cookie и сделайте вид, что его никогда не было.

Таким образом, в cookie не хранятся конфиденциальные данные, и вам не нужно их шифровать.

2 голосов
/ 08 мая 2009

Я бы тогда просто взорвал зашифровал с помощью Blowfish или (для так называемой безопасности) DES или чего-то еще ...

1 голос
/ 08 мая 2009

Если безопасность не имеет значения, используйте JSON для кодирования массива, а затем сгните 13 строку; -)

0 голосов
/ 08 мая 2009

Если его не нужно защищать, стоит взглянуть на обычный base64 или rot13.

0 голосов
/ 08 мая 2009

Попробуйте выполнить XOR - все элементы в массиве сохраняют полученный символ в строке - то же самое в обратном порядке для расшифровки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...