【发布时间】:2011-08-28 02:02:17
【问题描述】:
我还没有真正深入研究过 django 和签名
我正在尝试根据给定要求创建签名
i = 我的用户名,v = 过期,s = 签名
i: MYUSERNAME
v: UNIX TIMESTAMP + 2 小时
a: MY_API_KEY
s : SHA1 SIGNATURE 即 ("i=MYUSERNAME&v=(UNIX_TIMESTAMP + API_KEY)")
到目前为止我所拥有的。
import hashlib
import datetime
from datetime import timedelta
import time
now = datetime.datetime.now()
now = now + timedelta(hours=2)
seconds = time.mktime(now.timetuple())
seconds = seconds
API = "87df234207v4444444"
signature = hashlib.sha1()
signature.update("i=MYUSERNAME&v=%s%s" % (seconds, API))
然后,当我 ping 网址时,我收到“错误签名”响应
我在这方面的知识有限,非常感谢您的帮助
获取正确代码的有效 iframe 是 http://api.myurl.com/i=MYUSERNAME&v=UNIX TIMESTAMP + 2 HOURS&s=MY VALID SIGNATURE
PDF 文档
假设我们需要计算以下 URI 的签名:
http://framed.incloode.com/index.php?i=TEST&arg1=val1&arg2=val2&t=123
计算签名的方法如下:
- 查看参数和值的完整列表,
- 将这些附加到一个长字符串 HTML 安全字符串中,就像普通的 GET 请求一样, 对于上面的 URI,这个长字符串最终看起来像这样: i=测试&arg1=val1&arg2=val2&t=123
- 要指定此链接的有效时间,必须添加有效性。 有效性是一个 UNIX 时间戳——对于 2 小时的有效性,值 time() + 7200 应该被传递。此有效性(参数和值)还必须附加到要签名的字符串中。 对于上面的 URI,现在看起来像这样: i=TEST&arg1=val1&arg2=val2&t=123&v=1444567890 初始 URI 中的请求应替换为此列表。
- 然后从 HTML(htmlspecialchars_decode()) 中对上面收集的字符串进行解码,因此最终得到的字符串如下所示: i=TEST&arg1=val1&arg2=val2&t=123&v=1444567890
- 必须将您提供的“INCLOODE_API_SECRET”附加到此字符串: i=TEST&arg1=val1&arg2=val2&t=123&v=1444567890**INCLOODE_API_SECRET**
- 然后,最后必须生成该字符串的 SHA1 校验和。然后,将其附加到在步骤 (3) 中检索到的参数/值列表中。 这最终可能看起来像这样: http://framed.incloode.com? i=TEST&arg1=val1&arg2=val2&t=123&v=1444567890&s=abcdef0123456789
【问题讨论】:
-
我强烈建议您不要在 URL 中发送签名,尤其是如果您不使用 SSL。
标签: python django sha1 digital-signature