Для текста JSON:
application/json
тип среды MIME для текста JSON
application/json
. Кодировка по умолчанию является UTF-8. (Источник: RFC 4627 ).
Для JSONP (выполнимый JavaScript) с обратным вызовом:
application/javascript
Вот некоторые сообщения в блоге, которые были упомянуты в комментариях, которые релевантны.
Вы не должны шифровать пароли, вместо этого вы должны хешировать их, используя такой алгоритм, как bcrypt. В этом ответе объясняется, как правильно реализовать хеширование паролей в PHP . Тем не менее, вот как вы могли бы зашифровать / расшифровать:
$key = 'password to (en/de)crypt';
$string = ' string to be encrypted '; // note the spaces
Чтобы зашифровать:
$iv = mcrypt_create_iv(
mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC),
MCRYPT_DEV_URANDOM
);
$encrypted = base64_encode(
$iv .
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
hash('sha256', $key, true),
$string,
MCRYPT_MODE_CBC,
$iv
)
);
Расшифровать:
$data = base64_decode($encrypted);
$iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
$decrypted = rtrim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
hash('sha256', $key, true),
substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)),
MCRYPT_MODE_CBC,
$iv
),
"\0"
);
Предупреждение : В приведенном выше примере информация шифруется, но не аутентифицируется зашифрованный текст для предотвращения подделки. Вам не следует не полагаться на неаутентифицированное шифрование для безопасности , особенно потому, что предоставленный код уязвим для атак оракула с заполнением.
См. Также:
Кроме того, не используйте «пароль» для ключа шифрования. Ключи шифрования представляют собой случайные строки.
echo 'Encrypted:' . "\n";
var_dump($encrypted); // "m1DSXVlAKJnLm7k3WrVd51omGL/05JJrPluBonO9W+9ohkNuw8rWdJW6NeLNc688="
echo "\n";
echo 'Decrypted:' . "\n";
var_dump($decrypted); // " string to be encrypted "
Одна вещь, о которой следует помнить при работе с шифрованием:
Попытки быть умными и изобретать что-то свое обычно оставляют вас с чем-то небезопасным.
Вам, вероятно, лучше всего будет использовать одно из расширений шифрования , которые поставляются с PHP.
Это даст вам лишь минимальную защиту. Если злоумышленник может запустить произвольный код в вашем приложении, он сможет получить пароли точно так же, как ваше приложение. Вы все еще можете получить некоторую защиту от некоторых атак SQL-инъекций и неуместных резервных копий БД, если вы храните секретный ключ в файле и используете его для шифрования на пути к БД и дешифрования на выходе. Но вы должны использовать bindparams, чтобы полностью избежать проблемы внедрения SQL.
Если вы решите зашифровать, вы должны использовать для этого какую-нибудь криптографическую библиотеку высокого уровня, или вы ошибетесь. Вам нужно будет получить ключ-настройку, заполнение сообщения и проверки целостности правильные, или все ваши усилия по шифрованию бесполезны. GPGME - хороший пример. Mcrypt слишком низкий уровень, и вы, вероятно, ошибетесь.
Проверьте mycrypt (): http: // us. php.net/manual/en/book.mcrypt.php
И если вы используете postgres, есть pgcrypto для шифрования на уровне базы данных. (упрощает поиск и сортировку)