2つのファイルチェックサムを比較
チェックサムの比較は、転送後のファイルが転送前と同じ内容を保っているかをすばやく確認する方法です。同じアルゴリズムを使い、送信元で記録した値と送信先で計算した値を入力してください。このツールは大文字と小文字を区別せずに比較し、長さが異なる値をエラーとして扱い、明確な判定を返します。ファイル自体のアップロード、検査、ハッシュ計算は行わないため、ファイルと計算手順はお客様の管理下に保たれます。
無料で実行
送信元と送信先の値を比較します
ファイルが送信元を離れる前にチェックサムを計算し、転送が完了した後にもう一度計算してください。両方の計算では、同じアルゴリズムと設定を使用する必要があります。最初の値をchecksum_beforeに、次の値をchecksum_afterに貼り付けます。比較処理では前後の空白を除去し、どちらも空でないことと、文字数が同じであることを確認します。その後、大文字と小文字を区別せずに文字列を比較します。この動作は16進ダイジェストに便利です。表すバイトが同一でも、あるツールは英字を小文字で、別のツールは大文字で出力することがあるためです。trueは入力された表記が一致することを、falseは少なくとも1文字が異なることを示します。結果には検証済みの長さも含まれるため、比較した表記を記録できます。長さだけでは複数の形式を区別できず、文字列からアルゴリズムを証明できないため、このツールはアルゴリズムを推測しません。送信先の計算が送信元と確実に同じ方式になるよう、使用したアルゴリズムは転送手順に別途記録してください。
一致結果の保証範囲を正しく理解します
結果がtrueの場合、大文字と小文字を正規化した後の2つの文字列は同一です。選択したアルゴリズムにおいて、転送後のファイルが送信元ファイルと同じダイジェストを生成したという有力な証拠になります。ただし、このページがチェックサムを計算したことを示すものではありません。比較処理が受け取るのは2つの文字列だけです。また、両方の値を同じ場所からコピーした場合や、誤ったファイルから計算した場合の作業ミスも検出できません。結果がfalseなら、再転送する前に対象の各ファイルでチェックサムを計算し直してください。不一致の原因には、破損、未完了のアップロード、テキストモード変換、変更されたアーカイブ、別の成果物から貼り付けた値などがあります。この機能は同じアルゴリズムの使用を前提とするため、長さが異なる場合はfalseではなくエラーを返します。この前提では、長さの差は設定またはコピーの問題を意味します。無視されるのは英字の大小だけです。内部の空白、記号、接頭辞、区切り文字は値の一部として扱われるため、同等の出力形式を使うか、ツール固有の装飾を除去してください。
転送ワークフローに比較を組み込みます
単発のダウンロードでは、信頼できるローカルツールで送信元と送信先のチェックサムを計算し、アルゴリズムを記録したうえで、この比較を明確な二次確認としてご利用ください。自動配信では、送信元チェックサムを成果物の隣または署名済みマニフェストに保存し、最終書き込みの完了後に送信先の値を計算して、転送成功とする前にAPIを呼び出します。不一致なら公開やデプロイを停止し、調査に必要な情報を保存してください。不正な形式や異なる長さは設定エラーとして扱います。アルゴリズムは、ワークフローの脅威モデルと信頼性要件に応じて選んでください。偶発的な破損と意図的な差し替えの両方が問題になる場合は、現代的な暗号学的ハッシュが適しています。古い方式や短いチェックサムも制約のあるシステムでは役立ちますが、保証内容は異なります。この機能はアルゴリズムを推奨も強制もせず、同じ方法で既に生成された2つの値だけを比較します。決定的な処理であり、ネットワーク、モデル、乱数、時刻を使用しません。そのためブラウザーとAPIは同じ入力に同じ結果を返し、元ファイルを送信せず1リクエスト$0.002で自動比較できます。
活用例
ダウンロードしたリリースを検証
リリースで公開されたチェックサムと、ファイルのダウンロード後に計算した値を比較します。
成果物の転送を制御
送信先チェックサムが記録済みの送信元値と異なる場合に、デプロイや公開を停止します。
バックアップの完全性を確認
バックアップデータを比較サービスへ送らず、コピー前後に生成した値を照合します。
よくある質問
大文字と小文字は区別されますか?
いいえ。英字の大文字と小文字は同じものとして扱われるため、一般的な16進出力形式に対応できます。
長さが異なる値はなぜ拒否されますか?
同じアルゴリズムから得た値である必要があるためです。長さの差は、形式やアルゴリズムの不一致、または不完全なコピーを示します。
ファイルからチェックサムを計算しますか?
いいえ。お客様が入力した2つの文字列だけを比較し、元のファイルを受け取る必要はありません。
一致すれば転送の安全性が証明されますか?
大文字と小文字を区別せず、入力値が一致したことだけを示します。保証の強さは、計算方法、値の保護、正しいファイルとの関連付けにも左右されます。
空白は無視されますか?
値全体の前後にある空白だけを除去します。値の途中にある空白や区切り文字は比較対象です。
APIでの比較料金はいくらですか?
APIは1リクエストごとに$0.002です。同じ決定的な比較をブラウザーでも実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/verify/file-checksum-compare \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"checksum_before":"9e107d9d372bb6826bd81d3542a419d6","checksum_after":"9E107D9D372BB6826BD81D3542A419D6"}'const res = await fetch("https://api.kit.forhosting.com/verify/file-checksum-compare", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"checksum_before": "9e107d9d372bb6826bd81d3542a419d6",
"checksum_after": "9E107D9D372BB6826BD81D3542A419D6"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/verify/file-checksum-compare",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"checksum_before": "9e107d9d372bb6826bd81d3542a419d6",
"checksum_after": "9E107D9D372BB6826BD81D3542A419D6"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/verify/file-checksum-compare", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"checksum_before":"9e107d9d372bb6826bd81d3542a419d6","checksum_after":"9E107D9D372BB6826BD81D3542A419D6"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"checksum_before":"9e107d9d372bb6826bd81d3542a419d6","checksum_after":"9E107D9D372BB6826BD81D3542A419D6"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/verify/file-checksum-compare", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"checksum_before": "9e107d9d372bb6826bd81d3542a419d6",
"checksum_after": "9E107D9D372BB6826BD81D3542A419D6"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "verify.file_checksum_compare",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |