什麼是隨機權杖產生器?
使用Web Crypto API產生十六進位、Base64、英數字、URL安全、純數字、含符號或完全自訂字元集的隨機令牌。可用於API金鑰、工作階段令牌、CSRF令牌、數字PIN碼和一次性驗證碼,以及密碼重設連結等需要密碼學安全隨機性的場景。
所有位元組來自 crypto.getRandomValues,跟瀏覽器產生 TLS 金鑰用的是同一個來源。可選 16、32、48、64 或 128 位元組長度,熵值面板會即時顯示在所選格式下對應多少位元的隨機性。一次最多產生 20 條 token,可批次下載成 .txt。
使用方法
- 選擇令牌格式——十六進位、Base64、英數字、URL安全、純數字、含符號或你自己的自訂字元——並設定所需長度。
- 點選產生按鈕,立即建立密碼學安全的隨機令牌。
- 複製令牌,或一次批次產生多個令牌。
何時使用
- 簽發 API key、webhook 簽章密鑰或服務間驗證 token。
- 產生密碼重設連結、電子郵件驗證 token 或一次性登入網址。
- 為測試資料填入隨機 ID,避免互相撞號。
結果
產生一個256位元十六進位令牌(64個字元)用作API金鑰:「a3f8b2c1d4e5f6...」,基於crypto.getRandomValues提供完整熵值。
常見問題
- API key 到底需要多少位元熵才夠安全?
- 長期使用的 token 實務下限是 128 位元,完全超出暴力破解可達範圍。用於簽章或參與密碼學運算時建議 32 位元組(256 位元)。短期 session token 16 位元組就足夠。
- base64 和 URL-Safe 格式差在哪?
- base64 使用 + / 與 = 作為填充,放進網址或檔名會出問題。URL-Safe 把這兩個換成 - 和 _ 並去掉填充。凡是會出現在 query string、路徑或 HTTP header 的 token 都建議用 URL-Safe。
- 為什麼相同位元組數下,字母數字格式的熵比 hex 低?
- hex 和 base64 把每個位元組的完整 8 位元直接對映成字元。字母數字透過取模對映到 62 個字元,每位元組會少約 2 位元,還會帶來微小偏差。當 ID 沒問題,當金鑰就略嫌不足。
- 如果環境沒有 Web Crypto,可以退而求其次用 Math.random() 嗎?
- 不行。Math.random() 是可預測的偽隨機,攻擊者看到幾個輸出就能推出下一個。Web Crypto 在 2014 年後的瀏覽器和現代 Node.js 都支援。若環境真的沒有,就乾脆不要產生這個密鑰。
- 同一個 token 會不會在系統裡重複出現?
- 16 位元組的 token 大概要簽發 2^64 次才有機會撞上(生日攻擊界線)。在十億等級以下的應用裡,碰撞機率近乎於零,通常不必特別做唯一性檢查。