我对 url 签名感兴趣(例如http://.../?somearg=value&anotherarg=anothervalue&sig=aSKS9F3KL5xc),但我有一些要求让我没有解决方案。
- 我将使用其中一个
PHP
或Python
用于页面,因此我需要能够使用两者之一来签名和验证签名。 - 我的计划是使用 priv/pub 密钥方案对一些数据进行签名,并能够验证签名是否有效,但这就是复杂的地方:
- 验证发生时数据未知(不仅仅是
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
。
使用 PHPopenssl_get_privatekey()
并openssl_sign()
签署数据就好了,但我需要知道(解密!)数据才能验证(我不会有):openssl_get_publickey()
和openssl_verify($data, $signature, $pubkeyid);
来自http://php.net/openssl_verify。
或者我在这里错过了什么?
Python
所以我研究了 HMAC,但尽管和中都有许多散列函数,但PHP
我对如何验证散列感到困惑。
PHP
'shash_hmac()
允许我使用“键”(或在本例中为字符串键)创建散列。但是我如何去验证一个散列是有效的(即&sig=
不只是由最终用户手动输入&sig=abcdefg1234
。
总结一下(对不起,问题太长了):我如何验证我的服务器的(证书/字符串)密钥是否已生成签名/哈希(假设我无法通过重做所述数据的哈希来验证)?对于我应该选择哪条路线,Priv/pub-key 还是 HMAC,你有什么偏好吗?
非常感谢任何大小的指针!提前致谢,
- 乔什