← 所有工具
我哋嘅筆記

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. 1. 打開 DevToys 個 HMAC generator,將 hash 函數設做 SHA256
  2. 2. 將你個 signing secret 用純 UTF-8 文字貼入 key 欄。
  3. 3. 喺輸入度精確貼上 <timestamp>.<raw_body>——即係 X-Device-Timestamp 個值、一個 ASCII 點、再加原始 body bytes:
  4. 4. 將細楷 hex 輸出同 X-Device-Signature header 比。逐個 byte 一樣就即係密鑰、timestamp、body 全部夾得啱。
1716800000.{"type":"message.received", … }

幾時 CyberChef 或者寫 code 更啱

  • CyberChef。 如果你想喺一個 recipe 度將幾步串埋——先 base64 解碼 body,再 HMAC——我哋嘅 CyberChef 教學更靈活,代價係要貼入網頁。
  • 寫入 code。 任何要不斷做嘅,就喺 handler 度用常數時間比較(timingSafeEqualhmac.compare_digesthmac.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——而且永遠用常數時間函數嚟比較,千祈唔好用 ==