如何在Django中签署sha1签名?

时间:2011-05-18 13:34:50

标签: python django sha1 digital-signature

我还没有深入挖掘django和签名

我正在尝试根据给定的要求创建签名

i =我的用户名,v =到期,s =签名

我: 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网址时,我收到了“Bad Signature”回复

我对此领域的了解有限,非常感谢您的帮助

并且获取正确代码的有效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 safestring中,就像普通的GET请求一样,
  • 对于上面的URI,这个长字符串最终看起来像这样: I =&TEST放大器; 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
  •   
  • 然后,最后必须生成SHHA1checksumoft字符串。然后,将其附加到在步骤(3)中检索的参数/值列表。   这可能最终看起来像这样:   http://framed.incloode.com? I =&TEST放大器; ARG1 = VAL1&安培; ARG2 = val2的& T公司= 123&安培; V = 1444567890&安培; S = abcdef0123456789

1 个答案:

答案 0 :(得分:0)

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

hashed = signature.hexdigest()

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