socket.io со странным форматом отметки времени (?)
Я вижу запросы к socket.io, содержащие параметр t, чтобы они походили на LZywzeV, LZz5lk7 и подобные.
Все примеры, которые я нашел до сих пор, использовали метки времени UNIX, основанные на секундах или миллисекундах.
Кто-нибудь когда-нибудь видел такой формат меток времени? (Он не закодирован в base64).
2 ответа
Я начал искать сайт, который использует Socket.io сегодня, и получил ту же проблему, пытаясь найти определение протокола, было бесполезно.
Я понял, что этот формат называется дрожжами
TBH, действительно не знаю, почему люди изобретают такие вещи вместо использованияbase64(timestamp.getBytes())
псевдокод вместо.
Алгоритм дрожжевого декодирования в Python выглядит следующим образом:
from datetime import datetime
a='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'
b={a[i]: i for i in range(len(a))}
c=0
for d in "LZywzeV":
c=c*64+b[d]
print(c)
print(datetime.fromtimestamp(c/1000))
Выход этого кода:
1481712065055
2016-12-14 07:41:05
to @jeremoquai: Это просто, нужно инвертировать алгоритм:
def yeast(d):
r=""
while d!=0:
r='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'[d&63]+r
d>>=6
return r
так, если вы бежите
yeast(1481712065055)
он возвращает LZywzeV