ПланФикс API: Формирование цифровой подписи: различия между версиями
Seva (обсуждение | вклад) (Новая страница: «Цифровая подпись формируется из строки сформированной из склейки имени функции, параметр...») |
Alice (обсуждение | вклад) Нет описания правки |
||
(не показано 7 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
'''Цифровая подпись не обязательна. Т.к. обращение к API происходит с использованием SSL, обеспечивающего шифрование запроса, дополнительное подтверждение целостности запрос излишне, но при желании может использоваться.''' | |||
Цифровая подпись формируется из строки сформированной из склейки имени функции, параметров вызова функции и ключа подписи. | Цифровая подпись формируется из строки сформированной из склейки имени функции, параметров вызова функции и ключа подписи. | ||
Строка 12: | Строка 14: | ||
foreach ($list as $node) { | foreach ($list as $node) { | ||
if(is_array($node)) { | if(is_array($node)) { | ||
$result .= implode('', $node); | $result .= implode('', array_map('implodeElements', $node)); | ||
} else if(is_object($node)) { | } else if(is_object($node)) { | ||
$result .= implodeElements($node); | $result .= implodeElements($node); | ||
Строка 23: | Строка 25: | ||
</source> | </source> | ||
Полученная строка склеивается с ключом подписи. К результату склейки применяется алгоритм вычисления MD5 суммы - это будет являться цифровой подписью. | Полученная строка склеивается с ключом подписи. К результату склейки применяется алгоритм вычисления MD5 суммы - это будет являться цифровой подписью. | ||
К примеру для XML | |||
<source lang="xml"> | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<request method="auth.login"> | |||
<account>acc</account> | |||
<password>passw</password> | |||
<login>login</login> | |||
</request> | |||
</source> | |||
Строка подписи будет: | |||
"auth.login"+"acc"+"login"+"passw"+privateKey = auth.loginaccloginpassw..... (вместо точек ключа подписи - PrivateKey со страницы с ключами) | |||
== Перейти == | |||
*[[Коды ошибок]] | |||
*[[Список функций]] |
Текущая версия от 12:16, 25 июня 2018
Цифровая подпись не обязательна. Т.к. обращение к API происходит с использованием SSL, обеспечивающего шифрование запроса, дополнительное подтверждение целостности запрос излишне, но при желании может использоваться.
Цифровая подпись формируется из строки сформированной из склейки имени функции, параметров вызова функции и ключа подписи.
Склейка параметров осуществляется по следующему принципу: на одном уровне XML дерева происходит сортировка параметров по имени, затем они начинают склеиваться по очереди. Если параметр представляет собой список, то производится сортировка списка по значению и потом склейка его элементов. Если параметр является корнем поддерева, то к этому параметру применяется способ описанный выше. Так происходит до тех пор, пока не будут перебраны все элементы дерева XML.
Пример кода на php реализующий алгоритм
function implodeElements($xmlElement) {
$result = '';
$list = (array)$xmlElement;
ksort($list);
foreach ($list as $node) {
if(is_array($node)) {
$result .= implode('', array_map('implodeElements', $node));
} else if(is_object($node)) {
$result .= implodeElements($node);
} else {
$result .= $node;
}
}
return $result;
}
Полученная строка склеивается с ключом подписи. К результату склейки применяется алгоритм вычисления MD5 суммы - это будет являться цифровой подписью.
К примеру для XML
<?xml version="1.0" encoding="UTF-8"?>
<request method="auth.login">
<account>acc</account>
<password>passw</password>
<login>login</login>
</request>
Строка подписи будет: "auth.login"+"acc"+"login"+"passw"+privateKey = auth.loginaccloginpassw..... (вместо точек ключа подписи - PrivateKey со страницы с ключами)