
Appleショートカットアプリを利用して、ファイルAとファイルBのハッシュ値を比較してファイルの内容が一致しているか否かを調べるツールを作成しました。
用途としては、例えば、可逆圧縮にエンコードしたファイル(ex. FLAC ALAC)をデコードした時の復元性の確認や、あるファイルが改竄されているか否かを確認したい時などに使えます。
ハッシュ値について
ハッシュ(hash)値とは、あるデータ(例えばファイルなど)に対して計算される固定長の文字列や数字のことです。 この値は、元のデータの内容に基づいて計算され、データが変更されていないか、あるいは一致するかどうかを確認するために使用されます。 ハッシュ値の計算は簡単です。 ターミナルを開いて下のコード(ファイルはフルパス)を実行すると、ファイルのハッシュ値が表示されます。
ハッシュ値の計算
bash command sha256sum "original.wav" # 実行すると グリーンの文字列がハッシュ値です。 5a7caf857cb52ac0bb44581669f61f7d6f88ea35f5d9f7140c9f16fa789e8ef1 original.wav
異なる入力から同じハッシュ値が生成される現象を衝突と呼びます。 SHA-256の場合、衝突が発生する確率は「2の128乗分の1」であり、実質的にゼロに近いと言えます。 つまり、ファイルAとファイルBのハッシュ値を調べて一致するか否かを比較することで、ファイルの内容が同じか否かを調べることができます。
ファイルのハッシュ値を比較する【compare hash】ツールの作成
ターミナルを開いて、ファイルAとファイルBのハッシュ値を計算しハッシュ値の長い文字列を比較するのは面倒ですので、アップルショートカットアプリを使って【compare hash】ツールを作成しました。
Appleショートカットアプリを開いて、新規ショートカット「compare hash」を作成します。(Apple公式サイトで参照ください。)
下の画像は「ショートカットエディタ」に各アクションをレイアウトした画面です。 このプログラム(ワークフロー)は7つのアクションで構成されています。
下に「ショートカットエディタ」のスクリーンショットを掲載しておきますので、これに倣ってショートカットを作成してみてください。
「シェルスクリプトを実行」エリアに下のコードをコピペする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# ファイルのパスを引数で受け取る fileA="$1" fileB="$2" # ハッシュ値を計算(awkでハッシュ値のみ抽出) hashA=$(sha256sum "$fileA" | awk '{print $1}') hashB=$(sha256sum "$fileB" | awk '{print $1}') # ハッシュ値の比較 if [ "$hashA" == "$hashB" ]; then osascript << EOF display alert "ファイルAとファイルBのハッシュ値は一致しました。\n\nファイルA&B:${hashA}" EOF else osascript << EOF display alert "ファイルAとファイルBのハッシュ値は一致しません。\n\nファイルA:${hashA}\n---\nファイルB:${hashB}" EOF fi |
下の動画は、動作確認をしているvideoです
以上でショートカットアプリを使った【compare hash】ツールの完成です。
完成した【compare hash】ツールを使ってみる
Appleショートカットアプリで作成した compare hash を選択(クリック)して、ファイル選択画面からファイルAを選択し、次にファイルBを選択すると下の結果が表示されます。
ファイルA、Bが一致した場合
ファイルA、Bが不一致の場合
事例紹介
-
-
参 照FLACとALACが元のWAVファイルに復元されるか?ハッシュ値で調べてみました。
過去の記事では、FLACやALACフォーマットをAudacity上で元のWAVファイルとの絶対誤差から復元(可逆性)を確認しました。 FLACやALACの可逆性を確認する方法の一つに「ファイルのハッシ ...