В этой статье описывается операция генерации подписи и проверки интерфейса PHP API . Для вашей справки приведем следующие сведения:
В процессе разработки мы часто имеем дело с интерфейсом. Иногда мы называем интерфейс веб-сайта других людей, а иногда мы предоставляем интерфейс нашего собственного веб-сайта для других. Но в процессе звонка мы не можем обойтись без проверки подписи.
При разработке проверки подписи, пожалуйста, обратите внимание на следующие моменты:
- Изменчивость: каждая подпись должна быть разной.
- Своевременность: ограничение по времени каждого запроса, истечение срока действия и отмена и т.д.
- Уникальность: каждая подпись уникальна.
- Целостность: он может проверять входящие данные и предотвращать подделку.
1. Способ генерации знака параметра подписи
Шаг 1: отсортируйте все параметры (обратите внимание на все параметры), кроме самого знака и параметров с пустым значением, и отсортируйте их в порядке возрастания букв имени параметра.
Затем отсортируйте значение параметра 1 на шаге 2 Значение параметра n n (где параметры и значения должны быть исходными значениями параметров передачи и не могут быть обработаны, например “не могут быть преобразованы в”, а затем объединены) в строку.
Шаг 3. соедините ключ аутентификации, назначенный стороне доступа, перед строкой, полученной на шаге 2.
Шаг 2. добавьте ключ ключа проверки (ключевой ключ назначается поставщиком интерфейса стороне доступа к интерфейсу) перед строкой, полученной на предыдущем шаге, а затем вычислите значение MD5, чтобы получить 32-разрядную строку, а затем преобразуйте ее в верхний регистр
Шаг 4: вычислите значение MD5 (32 бита) строки на шаге 3, а затем преобразуйте его в верхний регистр. Полученная строка используется в качестве значения знака.
приведите пример:
Предположим, что передаваемые данные являются/интерфейсом. php ?sign=Значение sign_ & & & & P3 = & (лучший способ-отправить его по почте), где параметр sign соответствует значению sign_-это значение подписи.
Первым шагом является сращивание струны. Сначала удалите сам параметр sign, а затем удалите нулевой параметр P3, оставив & & & amp;, а затем отсортируйте его в порядке возрастания по символу имени параметра, & & &
Второй шаг-соединить имя и значение параметра, чтобы получить метод cancelp1v1p2v2pnvn
Третий шаг-добавить ключ проверки ключа перед строкой, сращенной выше. Мы предполагаем, что это ABC, и получаем новую строку abcmethodecancelp1v1p2v2pnvn
Шаг 4, MD5 используется для вычисления строки. Предположим, что получен ABCDEF, а затем он преобразуется в верхний регистр, чтобы получить ABCDEF, который является значением подписи знака.
Примечание: перед вычислением MD5, пожалуйста, убедитесь, что строковые коды интерфейса и стороны доступа согласованы. Например, кодировка UTF-8 или кодировка GBK используются одинаково. Если методы кодирования несовместимы, вычисленная подпись не сможет быть проверена.
2. Метод проверки подписи:
В соответствии с правилами метода для генерации знака параметра подписи, описанными выше, значение параметра подписи вычисляется и сравнивается с соответствующим значением параметра знака, указанного в параметре. Если он соответствует, проверка будет пройдена. Если нет, то параметр был изменен.
3, Давайте посмотрим на код напрямую
'[email protected]', 'sex' => '1', 'age' => '16', 'addr' => 'guangzhou', 'key' => $key, 'timestamp' => time(), ); //Get sign function getSign($secret, $data) { //Sort the array values by key ksort($data); //Form of generated URL $params = http_build_query($data); //Generate sign $sign = md5($params . $secret); return $sign; } //Data sent plus sign $data['sign'] = getSign($secret, $data); /** *Verify whether the sign is legal in the background * @param [type] $secret [description] * @param [type] $data [description] * @return [type] [description] */ function verifySign($secret, $data) { //Verify that there is a signature in the parameter if (!isset($data['sign']) || !$data['sign']) { Echo 'the data signature sent does not exist'; die(); } if (!isset($data['timestamp']) || !$data['timestamp']) { Echo 'the data parameter sent is illegal'; die(); } //Verification request, 10 minutes invalid if (time() - $data['timestamp'] > 600) { Echo 'validation failed, please resend the request'; die(); } $sign = $data['sign']; unset($data['sign']); ksort($data); $params = http_build_query($data); //$secret is obtained by querying the API database through key $sign2 = md5($params . $secret); if ($sign == $sign2) { Die ('validation passed '); } else { Die ("the request is illegal '); } } ?>
Более заинтересованные читатели, интересующиеся контентом, связанным с PHP, могут ознакомиться со специальными разделами этого веб-сайта: Учебник по безопасности программирования PHP, краткое описание навыков фильтрации безопасности PHP, учебник по введению базового синтаксиса PHP, учебник по объектно-ориентированному программированию PHP, краткое описание использования строк PHP (строк), учебник по эксплуатации базы данных PHP + MySQL и краткое описание общих навыков работы с базами данных PHP
Я надеюсь, что эта статья поможет вам в программировании на PHP.