工具用的順手嗎?
你的回饋能幫助我們做得更好
計算 FNV-1 與 FNV-1a 的 32 位元或 64 位元雜湊值,適合雜湊表、快取鍵與相容性測試。
FNV(Fowler–Noll–Vo)是一系列運算簡單、程式碼體積小的雜湊函式。本工具提供 FNV-1 與 FNV-1a 的 32 位元、64 位元變體,將輸入資料轉成固定長度的 Hash。它常用於雜湊表索引、快取鍵、識別資料變化和跨語言實作比對。
FNV 不是加密,也不是密碼學安全雜湊。Hash 無法透過「解密」還原原文,而且 32 或 64 位元輸出存在碰撞可能。請勿用 FNV 儲存密碼、產生驗證權杖、簽署訊息或保護敏感資料。
兩種變體都使用固定的 offset basis 和 FNV prime,差別在每個輸入位元組與乘法的順序。FNV-1 先乘再 XOR,FNV-1a 先 XOR 再乘;相同輸入在兩種變體中會得到不同結果。32 位元輸出較短,64 位元碰撞空間較大,但仍不等於密碼學安全。
跨系統交換 Hash 時,必須同時約定變體、位元寬度、字元編碼和輸出格式。只寫「FNV」不足以保證結果一致;FNV-1a-64、UTF-8、hex 小寫才是一組較完整的規格描述。
含中文、表情符號或組合字元時,UTF-8 位元組序列會影響結果。畫面看似相同的 Unicode 文字也可能因正規化形式不同而產生不同 Hash。
FNV 適合在非對抗環境快速分散鍵值,例如記憶體雜湊表、檔名或 URL 的簡短識別、開發測試與舊格式相容。把結構化資料做成快取鍵前,應先採用固定欄位順序與穩定序列化方式,否則物件內容相同也可能因字串順序不同而得到不同結果。
若需要檔案完整性驗證、防竄改、數位簽章或密碼衍生,應改用 SHA-256、HMAC、Argon2、scrypt 等符合目的的方案。加入自訂前後綴或重複計算,不會把 FNV 升級成安全演算法。
雜湊碰撞是兩份不同資料得到相同輸出的情況。位元數越小,當資料量增加時越容易遇到碰撞,因此 FNV 值不能作為唯一資料識別碼。需要唯一性時,仍應使用資料庫約束、UUID 或原始鍵。
驗證實作時不要只看一組自製範例,應使用公開規格的測試向量,包含空字串、ASCII、UTF-8、多個長度與前導零位元組。若結果不同,先檢查位元溢位、unsigned 運算、位元組順序和輸出大小寫。
FNV 可以解密嗎?不可以,它是單向雜湊,不是可逆加密。
FNV-1a 一定不會碰撞嗎?不會;所有固定長度雜湊都有碰撞可能。
可以拿來存密碼嗎?不可以,請使用專門的慢速密碼雜湊。
為什麼其他語言算出的值不同?常見原因是變體、位元寬度、UTF 編碼、signed/unsigned 或溢位處理不同。