как подписать подпись sha1 в Django? - PullRequest
0 голосов
/ 18 мая 2011

Я не особо углубился в джанго и подписи

Я пытаюсь создать подпись на основе заданных требований

i = мое имя пользователя, v = срок действия и s = подпись

i: MYUSERNAME
v: UNIX TIMESTAMP + 2 часа
a: 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-строки, как обычный запрос GET,
  • Чтобы указать, когда эта ссылка должна быть действительной, необходимо добавить действительность. Срок действия - метка времени UNIX - для срока действия 2 часа должно быть передано значение time () + 7200. Эта достоверность (параметр и значение) также должна быть добавлена ​​в строку для подписи. Для вышеупомянутого URI это теперь будет выглядеть так: я = TEST & арг1 = знач1 & арг2 = знач2 & т = 123 & v = 1444567890 Запросы в исходном URI должны быть заменены этим списком.
  • Собранная выше строка затем декодируется из HTML (htmlspecialchars_decode ()), поэтому в итоге получается строка, которая выглядит следующим образом: я = ТЕСТ & arg1 = val1 & arg2 = val2 & t = 123 & v = 1444567890
  • «INCLOODE_API_SECRET», который вы предоставили, должен быть добавлен к этой строке: я = TEST & arg1 = val1 & арг2 = значение2 & т = 123 & v = 1444567890 ** INCLOODE_API_SECRET **
  • Затем, наконец, должна сгенерироваться контрольная сумма SHA1 этой строки. Затем она добавляется в список параметров / значений, полученный на шаге (3). Это может выглядеть так: http://framed.incloode.com? я = TEST & арг1 = знач1 & арг2 = знач2 & т = 123 & v = 1444567890 & s = abcdef0123456789 * * тысячу пятьдесят-одна

1 Ответ

0 голосов
/ 18 мая 2011

Единственное, что я могу видеть из вашего описания, это то, что вы не захватываете шестнадцатеричный дайджест в конце, и я могу только предположить, что сервер ожидает. Вместо этого отправьте это значение:

hashed = signature.hexdigest()

В противном случае, пожалуйста, опубликуйте документацию для этого веб-сервиса и убедитесь, что вы соблюдаете требования к делу (вы никогда не знаете ...)

...