← 所有工具 用 DevToys 離線驗
我哋嘅筆記
用 DevToys 離線驗 X-Device-Signature
有時你想驗一個 webhook 簽章,但又唔想將 signing secret 貼入任何網站。DevToys 係一個完全離線運行嘅桌面工具箱——密鑰永遠唔會離開你部機。
DevToys 係咩
DevToys 係一把離線嘅「開發者瑞士刀」——一個桌面 app,將各種 generator、converter、encoder 打包埋一齊,慳返你為佢哋逐個開網頁工具。呢度我哋在意嘅係佢個 HMAC generator。
點解對 signing secret 嚟講離線好緊要
UnifyPort 個 webhook 簽章係一段以你 signing_secret 做密鑰嘅 HMAC。網頁版 hash 工具好方便,但要你將密鑰貼入版面。DevToys 樣樣都喺本地計——乜都唔會發出去——所以當密鑰係你真係喺度用嗰把嗰陣,佢係更穩陣嘅選擇。
喺 DevToys 度驗 X-Device-Signature
UnifyPort 對每條投遞係咁簽:
X-Device-Signature = hex( HMAC-SHA256( secret, timestamp + "." + raw_body ) )
想用手重現佢:
- 1. 打開 DevToys 個 HMAC generator,將 hash 函數設做
SHA256。 - 2. 將你個 signing secret 用純 UTF-8 文字貼入 key 欄。
- 3. 喺輸入度精確貼上
<timestamp>.<raw_body>——即係X-Device-Timestamp個值、一個 ASCII 點、再加原始 body bytes: - 4. 將細楷 hex 輸出同
X-Device-Signatureheader 比。逐個 byte 一樣就即係密鑰、timestamp、body 全部夾得啱。
1716800000.{"type":"message.received", … }
幾時 CyberChef 或者寫 code 更啱
- CyberChef。 如果你想喺一個 recipe 度將幾步串埋——先 base64 解碼 body,再 HMAC——我哋嘅 CyberChef 教學更靈活,代價係要貼入網頁。
- 寫入 code。 任何要不斷做嘅,就喺 handler 度用常數時間比較(
timingSafeEqual、hmac.compare_digest、hmac.Equal)嚟驗——千祈唔好用==。
喺邊度攞到輸入
- 要攞到餵入去嘅
X-Device-Timestamp同原始 body,用 webhook.site 捕獲一條投遞,或者用 smee.io 將佢轉發去 localhost。 - 更想用瀏覽器、仲想要一份分享得到嘅 recipe?CyberChef 教學跑嘅係同一套演算法。
常見問題
- DevToys 支援邊啲平台?
- DevToys 係一個畀 Windows 同 macOS 嘅離線桌面 app。當你唔想將 signing secret 貼入網頁表單嗰陣就用佢。
- DevToys 點解比網頁版 HMAC 工具更穩陣?
- 佢完全喺你部機度運行——你打入嘅 signing secret 永遠唔會傳去 server。網頁工具可能都係 client-side 計,但用桌面 app 你唔使去賭呢樣嘢。
- 我計出嚟個簽章同 X-Device-Signature 對唔上,邊度錯咗?
- 三個常見原因:用錯咗 signing secret;body 喺你 hash 之前畀人改過(JSON 重新序列化、去咗空白、做咗 unicode 正規化);或者 timestamp 讀錯咗 header——淨係
X-Device-Timestamp參與簽。輸入一定要啱啱係<timestamp>.<raw_body>,中間係一個真正嘅點。
一對上之後
將同樣嘅計算搬入你個 handler——Node 用 crypto.createHmac、Python 用 hmac.new、Go 用 hmac.New——而且永遠用常數時間函數嚟比較,千祈唔好用 ==。