【发布时间】:2011-10-24 01:23:36
【问题描述】:
我对 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。
使用 PHP 的 openssl_get_privatekey() 和 openssl_sign() 对数据进行签名就好了,但我需要知道(解密!)数据才能验证(我不会拥有):openssl_get_publickey() 和 openssl_verify($data, $signature, $pubkeyid); 来自 @ 987654322@.
或者我在这里遗漏了什么?
所以我研究了 HMAC,但尽管 Python 和 PHP 都提供了许多哈希函数,但我对如何进行 验证 哈希。
PHP 的hash_hmac() 允许我使用“键”(或者在本例中为字符串键)创建散列。但是我该如何验证哈希是否有效(即 &sig= 不是由最终用户 &sig=abcdefg1234 手动输入的。
总结一下(对不起,问题太长了):我如何验证我的服务器的(证书/字符串)密钥是否已生成签名/哈希(假设我无法通过重做所述数据的哈希来验证) ?对于我应该选择哪条路线,Priv/pub-key 还是 HMAC,你有什么偏好吗?
非常感谢任何大小的指针! 提前致谢,
- 乔什
【问题讨论】:
标签: url verification signing private-key hmac