2011-05-18 38 views
0

我還沒有真正挖到深入到Django和簽名我如何在Django上簽名sha1簽名?

我試圖創建一個基於特定要求的簽名

我=我的用戶名,V =到期,和s =簽名

I:名爲myUsername
ν: Unix時間戳+2小時
一個: MY_API_KEY
S: SHA1簽名是( 「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)) 

然後當我平安的URL,我得到一個「壞標記」響應

同樣我在這方面的知識是有限的,你的幫助是非常讚賞

和有效的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中的請求應該由此列表替換。 I = TEST&ARG1 = VAL1&ARG2 = val2的&T = 123&V = 1444567890
  • 的「INCLOODE_API_SECRET」您有:
  • 上述收集串然後從HTML解碼(htmlspecialchars_decode()),所以一個是字符串看起來像這樣結束了一直與必須被附加到這個串供給: I = TEST&ARG1 = VAL1&ARG2 = val2的&T = 123&v = 1444567890 ** INCLOODE_API_SECRET **
  • 然後,finallytheSHA1checksumofthatstringmustbegenerated.Then,ITIS附加到在步驟中檢索到的參數/值列表(3) 。 這可能會看起來像這樣: http://framed.incloode.com?I = TEST & ARG1 = VAL1 & ARG2 = VAL2 & T = 123 & V = 1444567890 & S = abcdef
+0

我堅決從發送氣餒在URL中籤名,**特別是如果你不使用SSL。** – 2011-05-18 13:37:18

回答

0

我可以從你的描述看,唯一的事情是,你沒有抓住六角消化末,我只能假定服務器期望的是什麼。發送此值,而不是:

hashed = signature.hexdigest()

否則請發佈此Web服務的文檔,並確保您正在履行情況的要求(你永遠不知道...)

+0

是的,我確實將它作爲signature.hexdigest傳遞給它。我也會發布文檔 – ApPeL 2011-05-18 14:10:48