【问题标题】:how do I sign sha1 signature in Django?如何在 Django 中签署 sha1 签名?
【发布时间】: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


【解决方案1】:

我从你的描述中唯一能看到的是你没有在最后抓取十六进制摘要,我只能假设这是服务器所期望的。改为发送此值:

hashed = signature.hexdigest()

否则,请发布此 Web 服务的文档,并确保您遵守案例要求(您永远不知道...)

【讨论】:

  • 是的,在 url 中我确实将它作为 signature.hexdigest 传递。我也会发布文档
猜你喜欢
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2018-08-11
相关资源
最近更新 更多