WeChall - Luggage

Challenge

机场储物柜 QR 码。题面给出 15 条"捡来的废弃 QR 码"样本(日期/时间/Row/Locker + 13 位数字码),并给出你自己的目标:From what I remember, I locked my belongings at <时间> in locker <N> row <M>. 要求还原对应 QR 码并提交。目标由 session 派生(WC_CryptoChall::generateSolution('FooBarley', true, true, 4) 的 4 字符 seed → locker/row/时间),每次 session 不同。

Solution

编码规则极其简单:13 位 QR 码 = Row(2位) + 反转的 Unix 时间戳(10位) + "0"

时间戳取柏林时区(Europe/Berlin)解释样本日期时间后转 UTC。反转即把十进制时间戳字符串倒序。

验证样本:

1
2
02.07.2019 11:24:05 CEST → UTC 1562059445 → 反转 5449502651
row 03 → 03 + 5449502651 + 0 = 0354495026510 ✓

解题脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python3
"""Luggage: QR = row(2) + reverse(unix_ts_berlin) + '0'"""
from datetime import datetime, timedelta
import zoneinfo, sys

def solve(date_str, time_str, row):
"""date_str: 'Feb 17, 2024', time_str: '15:11:29', row: 9"""
dt = datetime.strptime(f"{date_str} {time_str}", "%b %d, %Y %H:%M:%S")
# challenge times are Europe/Berlin; convert to UTC
berlin = zoneinfo.ZoneInfo("Europe/Berlin")
dt = dt.replace(tzinfo=berlin)
ts = int(dt.timestamp()) # UTC epoch
return f"{row:02d}{str(ts)[::-1]}0"

if __name__ == "__main__":
# 目标从挑战页复制: "Feb 17, 2024 - 15:11:29 in locker 23 row 9"
ans = solve("Feb 17, 2024", "15:11:29", 9)
print(ans) # 0998097180710