У меня есть веб-сервер, на котором запущены mysql и php, которые отправляют данные в строку json.
У меня есть второй веб-сервер, который считывает данные, а затем отображает их.
На данный момент все работает нормально.
Мне нужно добавить некоторые важные данные в строку, поэтому мне было интересно, как лучше всего зашифровать / расшифровать json, используя php?
Может кто-нибудь помочь !?
Бьюсь об заклад, лучший способ – использовать SSL (HTTPS), и я рекомендую вам прочитать Руководство OWASP и особенно раздел How-To .
Мне всегда нравился MCRYPT
//Key $key = 'SuperSecretKey'; //To Encrypt: $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, 'I want to encrypt this', MCRYPT_MODE_ECB); //To Decrypt: $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_ECB);
Если это то, что вы ищете. Он будет обрабатывать JSON как строку, а затем, после того, как вы расшифруете его, вам нужно будет выполнить json_decode()
или что бы вы ни делали.
Это действительно зависит от того, насколько чувствительны данные. Однако из моего опыта простое шифрование php обычно делает трюк. Обычно я шифровал чувствительные поля в полях данных json перед их кодировкой в json-строку.
Вот код для части шифрования.
$ key = 'password to (en / de) crypt'; $ string = 'строка для шифрования'; // обратите внимание на пробелы
Чтобы зашифровать:
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
Чтобы расшифровать:
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
Тем не менее, вы всегда должны использовать хэш (MD5, SHA1) пароли, предпочтительно с солью.
Храните закрытый ключ на сервере и используйте шифрование DES; это двухсторонний алгоритм.
РЕДАКТИРОВАТЬ:
По замечанию, кажется, я неверно истолковал этот вопрос. Мое предположение заключалось в том, что OP хотел бы отправить зашифрованные данные в Интернете, как в электронном письме или что-то, а затем вернуть данные позже и сможет расшифровать его. Я обязательно проясню будущие комментарии в будущем перед отправкой ответа.
Использовать открытый SSL:
http://www.php.net/manual/en/book.openssl.php
Вы можете создать пару открытых / закрытых ключей без необходимости использования https, если она недоступна.
Конечно, для безопасной передачи данных через Интернет требуется SSL (HTTPS).
Но при этом все еще есть причины для шифрования данных json, прежде чем вы их отправите.
У меня возникла проблема с шифрованием данных json. Это было вызвано «\ t» в json-данных. Перед шифрованием необходимо удалить их. В противном случае возникнет проблема, когда вы захотите расшифровать ее обратно в формат propper json.
$ plain_txt = str_replace ("\ r", '', $ plain_txt);
$ plain_txt = str_replace ("\ n", '', $ plain_txt);
$ plain_txt = str_replace ("\ t", '', $ plain_txt);
См. Рабочий пример: https://gist.github.com/petermuller71/33616d55174d9725fc00a663d30194ba