この記事の目次 開く・閉じる

今回の仕上がり
「abc」同士では同じ64桁の16進数になり、片方の末尾へ改行を入れると不一致になりました。SHA-256は入力データから一定長の値を作るハッシュ関数です。保存前後の内容を比べる手がかりになります。
ここではUTF-8へ変換した文字列のバイトを計算します。見た目が似ていても、空白・改行・文字の表し方が違えば入力のバイト列は変わります。文字列が違う場合のハッシュが必ず異なるという保証を、この小さな実験から導くことはできません。
一致と不一致を試す
- 下の作例はA・Bともabcで始まります。「SHA-256を比較」を押します。
- 両方ともba7816bfで始まる同じ値になり、「一致」と出ることを確認します。
- Bの末尾でEnterを1回押し、再び比較します。Bはedeaaff3で始まり、「不一致」になりました。
- Bの改行を消して再実行すると一致へ戻ります。
const bytes = new TextEncoder().encode(text);
const buffer = await crypto.subtle.digest('SHA-256', bytes);
const hex = Array.from(new Uint8Array(buffer),
b => b.toString(16).padStart(2, '0')).join('');HTTPSまたはlocalhostで開いてください。crypto.subtleが使えない環境では、作例に案内を表示します。長大なファイルの分割読込は実装しておらず、短い公開可能な例文だけを試す画面です。
ハッシュの限界
ハッシュには復号して本文へ戻す操作はありません。ただし、候補を計算して同じ値を探すことはできるため、短い秘密をハッシュにしただけで公開してよいとは判断できません。この作例は暗号化やパスワード保管の実装ではありません。
比較する値自体を攻撃者が書き換えられる場合、ハッシュが一致しても配布元の正当性は確かめられません。値を信頼できる経路から入手する必要があります。Web Cryptoのdigestの資料を参照し、署名や認証の仕組みとは分けて考えます。
今回の入力は端末内で計算し、送信・保存していません。OSが保存する改行や、別エンコーディングのファイルを比較した試験ではありません。
作例と保存
確認日:2026年11月1日。PCブラウザで操作確認。スマホ実機・読み上げ・全ブラウザでの検証は行っていません。