FNV-1aハッシュ計算
各バイトを混ぜてから掛け算する方式で、テキストのFNV-1aハッシュを求めます。foobarは32ビットでbf9cf968、64ビットなら16桁の16進数になり、ハッシュ表やブルームフィルター、キャッシュのキーに使える安定した値です。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- テキスト
- foobar
- ビット数
- 32
- ビット
- 32
- ハッシュ
- bf9cf968
- ハッシュ (整数)
- 3,214,735,720
- バイト
- 6
FNV-1aはFowler–Noll–Voハッシュの代替形です。暗号ハッシュより安価で、単純な合計より順序に敏感な32ビットまたは64ビットの安定したタグが必要なとき、開発者はFNV-1aを選びます。このFNV-1aハッシュツールは平文を受け取り、UTF-8として直列化し、小文字の16進文字列—32ビットプロファイルでは8桁、64ビットでは16桁—に加え整数形、UTF-8バイト長、選択した幅、元文字列の長さがゼロのときのemptyフラグを返します。
FNV-1aの意味と32ビット・64ビットプロファイルの違い
Fowler–Noll–Voハッシュは、文書化されたオフセット基底から始め、各入力バイトについてまず実行中のハッシュにそのバイトを排他的論理和し、次にその幅向けの素数を掛けて、固定幅の残差にメッセージを畳み込みます。代替形FNV-1aは乗算の前に排他的論理和を適用します。古いFNV-1は先に乗算します。
この能力はFNV-1aのみを実装します。今日の多くの言語エコシステムとハッシュテーブルの教程が引用する順序だからです。32ビットでは基底はゼロ-x-八-一-一-c-九-d-c-五、素数はゼロ-x-ゼロ-一-ゼロ-ゼロ-ゼロ-一-九-三で、8桁の小文字hex文字列になります。
64ビットでは基底はゼロ-x-c-b-f-二-九-c-e-四-八-四-二-二-二-三-二-五、素数はゼロ-x-一-ゼロ-ゼロ-ゼロ-ゼロ-ゼロ-ゼロ-ゼロ-一-b-三で、16桁のhexになります。FNV-1aはテーブルでの高速ハッシュと軽量な完全性タグ向けであり、暗号ハッシュではありません。
意図的な衝突耐性、パスワード保管、署名方式が必要な場面では使ってはいけません。第三者ツールが同じUTF-8バイトで食い違う場合、ほぼ常にFNV-1aではなくFNV-1を使っているか、幅が違うか、UTF-8バイトではなくUTF-16符号単位をハッシュしています。
FNV-1aハッシュが役立つ場面
開発者は、言語ランタイムやレガシープロトコルメモに合うコンパクトな32ビットまたは64ビットのバケット索引が必要なとき、短いキー、設定断片、キャッシュ識別子をFNV-1aハッシュ計算機に貼り付けます。サポート技術者はチケット文からダイジェストを再計算し、貼り付けたダンプが途中で切り詰められたり再符号化されたりしていないかを確認します。
継続的インテグレーションのジョブは既知の文字列ベクトル—例としてfoobarを32ビットのbf9cf968へ—と空入力フィクスチャを固定し、偶発的なFNV-1とFNV-1aの入れ替えがビルドを即座に失敗させます。失敗した検証は残高を消費しません。
活用例
ハッシュテーブルのキーとバケットタグ
テーブルのバケット、ブルームフィルタ、キャッシュシャードキー向けに安定した32/64ビット非暗号指紋が必要なとき、短い文字列のFNV-1aを計算します。
教室とサポートのデモ
数文字の編集でFNV-1aのhexがどう変わるかを、ローカルユーティリティや暗号ライブラリを入れずに学生と運用担当者に示します。
よくある質問
32ビットと64ビットのFNV-1aの違いは何ですか?
どちらも各UTF-8バイトにFNV-1aの排他的論理和のあと乗算を使いますが、オフセット基底と素数が異なります。32ビットはhex8桁、64ビットは16桁です。bitsを省略すると既定は32です。
空入力ではどうなりますか?
空テキストは有効です。 応答はemptyをtrue、hashを選択幅のオフセット基底(32ビットは811c9dc5、64ビットはcbf29ce484222325)、bytesを0にします。
FNV-1aは暗号ハッシュですか?
いいえ。 FNV-1aはテーブルや軽量指紋向けの高速な非暗号ハッシュです。パスワード、署名、攻撃者に対する衝突耐性のある完全性には使わず、そうした用途ではSHA系ダイジェストを使ってください。
ほかのツールとFNV-1aの結果が違うのはなぜですか?
同じテキストなら、相手のツールはたいてい、掛けてから混ぜるFNV-1を使っているか、幅が違うか、UTF-8のバイトではなくUTF-16の単位でハッシュしています。このツールはUTF-8のバイトをFNV-1aの順番で計算します。
FNV-1aハッシュはどう計算しますか?
32ビットでは決まった開始値0x811c9dc5から始めます。テキストの各バイトを排他的論理和で現在の値に混ぜ、その値に素数0x01000193を掛けて32ビットに収めることを繰り返します。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/fnv1a \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"foobar"}'const res = await fetch("https://api.kit.forhosting.com/enc/fnv1a", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "foobar"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/fnv1a",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "foobar"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/fnv1a", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"foobar"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"foobar"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/fnv1a", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "foobar"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.fnv1a",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
固定のオフセット基底、慎重に選ばれた素数、バイトごとの排他的論理和のあと乗算という手順から成る高速な非暗号ダイジェストで、ハッシュテーブル、ブルームフィルタ、コンパクトな指紋フィールドでよく使われます。ネットワーク呼び出し、乱数ソルト、壁時計は計算に入らず、成功パスはすべて公開の基本価格$0.002での純粋な算術です。
FNV-1aの意味と32ビット・64ビットプロファイルの違い
空入力では残差はオフセット基底そのものになり、このエンドポイントはemptyをtrueにして、意図した空白と欠落フィールドをクライアントが区別できるようにします。
入力契約、応答フィールド、空入力の扱い
任意のbitsは幅を選びます。32(既定)または64です。空文字列は意図的に許可されています。元の長さがゼロのとき、応答はemptyをtrue、hashを選択幅の基底hex、bytesをゼロにします。FNV-1、MD5、SHA、CRCへのモード切替はありません。それらのダイジェストが必要な場合は専用能力を使い、各ランディングが単一の検索意図とSEOスラッグに一致するようにしてください。ハッシュしたい文字列を必須フィールドtextに設定したJSON本体を送信してください。別名input、value、s、string、contentも受け付けるため、古いフォームや短いクライアントでも結合できます。別名widthとbit_widthも受け付け、数値形・文字列形のどちらも使えます。有限数と大きな整数はハッシュ前に文字列化され、オブジェクト、配列、真偽値、null、Infinity、NaNはinvalid_inputを起こし課金されません。ゼロバイト上のFNV-1aの数学的恒等はオフセット基底であり、任意フィールドに指紋を付けるパイプラインは硬い失敗ではなく安定した残差を必要とするからです。空でない入力ではemptyはfalse、bytesはUTF-8長、hashはゼロ-x接頭辞なしの小文字hexダイジェスト、hash_intは32ビットでは符号なし整数として、64ビットではJSONで完全な符号なし範囲が正確に保たれるよう10進文字列として同じ値を運びます。algorithmは常にラベルFNV-1a、offset_basisとprimeは選択幅のパラメータ文字列を返し、OpenAPIの例やサポート回答がプロファイルを曖昧さなく引用できます。
FNV-1aハッシュAPIが役立つ場面
教育ラボは同じエンドポイントで、1文字の変更が多くのhex桁を反転させる様子を示し、暗号装置を持ち込まずにアバランシェ挙動を説明します。実装は純粋なparseのティアAなので、成功した呼び出しはモデルトークンも外向きネットワークもなく公開の基本価格$0.002です。ペイロードを文書化された文字上限内に保ち、hexフィールドを正規の貼り付け先として扱い、別のハッシュサービスを立てずにドキュメント、SDK、エッジワーカー、教室デモ向けの再現可能なFNV-1a値を得てください。
連携の活用例
CIゴールデンベクトルと空入力フィクスチャ
foobar → bf9cf968(32ビット)と空 → オフセット基底を固定し、FNV-1とFNV-1aの取り違えやUTF-8符号化のずれを継続的インテグレーションが即座に検出できるようにします。
技術的な質問
テキストのFNV-1aハッシュはどのように計算しますか?
textに文字列を、任意のbitsに32または64(既定32)を入れたJSONを送ってください。hashフィールドはUTF-8バイト上のFNV-1aダイジェストの小文字hexを返します。hash_intは同じ値の符号なし整数です(32ビットは数値、64ビットは10進文字列)。
FNV-1aハッシュ計算機の料金はいくらですか?
ブラウザツールは無料です。API要求は成功した呼び出しごとに前払いKIT残高から$0.002です。無効な入力は課金されません。