Меня интересует подпись URL (например, http: //.../? Somearg = value & anotherarg = anothervalue & sig = aSKS9F3KL5xc ), но у меня есть несколько требований которые оставили меня без решения.
PHP
, либо Python
для страниц, поэтому мне нужно будет подписать и проверить подпись используя один из двух. somearg = value & anotherarg = anothervalue
) Моим первым побуждением было использовать OpenSSL, например с парой ключей RSA, чтобы сделать что-то вроде подписи: openssl rsautl -sign -inkey private.pem -in sensitive -out privsigned
и проверки на основе данных privsigned
и ТОЛЬКО ключ: openssl rsautl -verify -inkey public.pem -in privsigned -pubin
.
Использование PHP openssl_get_privatekey ()
и openssl_sign ()
подписывает данные в порядке, но мне нужно знать (расшифрованные!) данные, чтобы проверить (чего у меня не будет): openssl_get_publickey ()
и openssl_verify ($ data, $ signature, $ pubkeyid );
из http://php.net/openssl_verify .
Или мне что-то здесь не хватает?
Итак, я заглянул в HMAC, но хотя многие хэш-функции доступны в обоих Python
и PHP
, я не понимаю, как бы я проверил хэш.
PHP
hash_hmac ()
позволяет мне создавать хеш с использованием «ключа» (или, в данном случае, строкового ключа). Но как мне проверить, что хеш действителен (например, & sig =
не только что был вручную введен конечным пользователем & sig = abcdefg1234
.
Итак, чтобы подвести итог вверх (извините за длинный вопрос): Как я могу проверить, что подпись / хеш была сделана ключом моего сервера (сертификат / строка) (учитывая, что я не могу проверить, переделав хеш указанных данных)? И есть ли у вас какие-либо предпочтения относительно того, какой маршрут я должен выбрать, Priv / pub-key или HMAC?
Приветствуются любые указатели, большие или маленькие! Заранее спасибо,