隨機 Base64 生成器

使用瀏覽器內建的安全隨機數生成器建立隨機 Base64 字串。可按位元組或字元設定長度,一次最多生成 1000 個,並可選擇標準或 URL 安全格式。

完全在瀏覽器中執行,不會上傳任何資料。

使用方法

  1. 設定長度,並選擇按隨機資料的位元組數還是按 Base64 字元數計算。生成金鑰時建議按位元組,32 位元組即 256 位金鑰。
  2. 設定需要生成的數量,以及各結果之間的分隔符:換行、逗號或空格。
  3. 選擇標準或 URL 安全變體。按位元組生成時,如果目標系統不需要末尾的等號,還可以關閉填充。
  4. 點選「生成」獲取新的隨機值,然後點選「全部複製」或「下載」。

位元組、字元與熵

隨機字串的強度用熵(以位為單位)來衡量。每個隨機位元組提供 8 位熵,因此 16 位元組是 128 位,32 位元組是 256 位。Base64 只是改變了這些位元組的書寫方式:每個字元承載 6 位,每 3 個位元組變成 4 個字元。工具會顯示每個字串的熵,方便你隨時核對。

選擇位元組單位時,輸出解碼後正好是指定數量的隨機位元組,這正是金鑰和機密所需要的。選擇字元單位時,會得到精確數量的字元,每個字元都從 64 個字元的字母表中均勻選取,適合系統要求固定長度、並按文字儲存的權杖。

位元組數Base64 字元數熵典型用途
121696 位AES-GCM 的 nonce(IV)
1624(不填充時 22)128 位鹽值、會話權杖、CSRF 權杖、AES-128 金鑰
3244(不填充時 43)256 位AES-256 和 HMAC-SHA256 金鑰、HS256 金鑰、API 金鑰
6488(不填充時 86)512 位HMAC-SHA512 金鑰、HS512 金鑰

隨機 Base64 的常見用途

  • JWT 金鑰。RFC 7518 要求 HMAC 金鑰長度不小於雜湊輸出長度:HS256 至少 32 位元組,HS384 至少 48 位元組,HS512 至少 64 位元組。有的程式庫直接把金鑰字串當作金鑰,有的會先做 Base64 解碼,請確認你所用的庫屬於哪一種。JWT 解碼工具可以用這兩種形式的金鑰驗證 HS256 到 HS512 簽名,HMAC 生成器也支援以文字、十六進位或 Base64 形式輸入金鑰。
  • 應用金鑰。例如 Laravel 會把 32 位元組的加密金鑰以 APP_KEY=base64:... 的形式寫在 .env 檔案中,與本工具按 32 位元組生成的字串格式相同。
  • Kubernetes Secret。data 下的值必須是帶填充的標準 Base64。按位元組、標準變體並開啟填充生成的字串可以直接填入,Pod 拿到的是原始隨機位元組。如果應用需要的是 Base64 文字本身,請改用 stringData。
  • URL 中的權杖。重置密碼連結、邀請碼等需要放進 URL 的權杖應使用 URL 安全變體,它用 - 和 _ 代替 + 和 /,詳見 Base64URL。

為什麼用 crypto.getRandomValues 而不是 Math.random

Math.random() 是快速的通用隨機數生成器,其輸出並不保證不可預測,在某些 JavaScript 引擎中,只需少量輸出就能推算出內部狀態。本工具使用 crypto.getRandomValues(),這是由作業系統提供種子的加密安全隨機數生成器,與 openssl rand 和 Python 的 secrets 模組屬於同一類隨機源。所有值都在你的裝置上生成,不會被髮送或儲存。

在程式碼中生成隨機 Base64

# Shell:32 個隨機位元組的 Base64(44 個字元)
openssl rand -base64 32
head -c 32 /dev/urandom | base64

# Python
import base64, secrets
base64.b64encode(secrets.token_bytes(32)).decode()
secrets.token_urlsafe(32)        # URL 安全,無填充,43 個字元

// Node.js
const crypto = require('crypto');
crypto.randomBytes(32).toString('base64');
crypto.randomBytes(32).toString('base64url');   // URL 安全,無填充

// 瀏覽器
const bytes = crypto.getRandomValues(new Uint8Array(32));
btoa(String.fromCharCode(...bytes));

常見問題

隨機金鑰應該多長?

如果只要求值唯一且無法被猜到,例如會話 ID、CSRF 權杖和鹽值,16 位元組(128 位)就足夠了。AES-256 金鑰、HMAC-SHA256 金鑰和 HS256 金鑰建議使用 32 位元組(256 位),HMAC-SHA512 和 HS512 則使用 64 位元組。

和 openssl rand -base64 32 的結果一樣嗎?
格式相同。長度設為 32 位元組、選擇標準變體並開啟填充時,每個結果都是 44 個字元,末尾有一個 =,解碼後是 32 個隨機位元組。當然,每次生成的具體值都不一樣。
應該按位元組還是按字元設定長度?

如果字串之後要被解碼,例如加密金鑰和 Kubernetes Secret,請按位元組。如果系統需要固定長度、直接按文字使用的權杖,請按字元。按字元生成的字串,只有長度是 4 的倍數時才能保證正常解碼。

什麼時候需要 URL 安全變體?
只要值會放進 URL、查詢參數、Cookie 或檔名中就需要。在標準 Base64 中,/ 會分隔 URL 路徑,+ 在表單編碼的查詢字串裡會變成空格。URL 安全的 Base64 改用 - 和 _,通常也不帶填充。
生成的值會被儲存或上傳嗎?

不會。所有值都由瀏覽器中的 JavaScript 生成,不會傳輸到任何地方,離開頁面後即消失。一旦把某個值用作真正的機密,請把它儲存在密碼管理器或金鑰管理服務中,不要放在聊天記錄或工單裡。