
Appleショートカットアプリを利用して、ファイルAとファイルBのハッシュ値を比較してファイルの内容が一致しているか否かを調べるツールを作成しました。
用途としては、例えば、可逆圧縮にエンコードしたファイル(ex. FLAC ALAC)をデコードした時の復元性の確認や、あるファイルが改竄されているか否かを確認したい時などに使えます。
ハッシュ値について
ハッシュ(hash)値とは、あるデータ(例えばファイルなど)に対して計算される固定長の文字列や数字のことです。 この値は、元のデータの内容に基づいて計算され、データが変更されていないか、あるいは一致するかどうかを確認するために使用されます。 ハッシュ値の計算は簡単です。 ターミナルを開いて下のコード(ファイルはフルパス)を実行すると、ファイルのハッシュ値が表示されます。
ハッシュ値の計算
bash command sha256sum "original.wav" # 実行すると グリーンの文字列がハッシュ値です。 5a7caf857cb52ac0bb44581669f61f7d6f88ea35f5d9f7140c9f16fa789e8ef1 original.wav
異なる入力から同じハッシュ値が生成される現象を衝突と呼びます。 SHA-256の場合、衝突が発生する確率は「2の128乗分の1」であり、実質的にゼロに近いと言えます。 つまり、ファイルAとファイルBのハッシュ値を調べて一致するか否かを比較することで、ファイルの内容が同じか否かを調べることができます。
ショートカットで、ファイルのハッシュ値を比較するアプリの作成
Apple・ショートカットには、「ハッシュ値を生成する」アクションが付属しています。 このアクションでは、ハッシュ値の4種類(MD5、SHA-1、SHA-256、SHA-512)から選択可能です。 今回は、SHA-256を選択しています。
このショートカット・アプリの名前は、「ハッシュ値比較」にしました。
Step
1 アクションの配置・プログラム
ショートカット・アプリを起動して「ファイル」>「新規ショートカット」をクリックすると、まっさらなショートカット編集画面が現れます。 ここに下の様に【アクション】をキーワード検索して当該アクションをドラッグして配置します。
- 【通知】アクション:
- 【ファイルを選択】アクション:ファイルA(比較元)を選択
- 【ハッシュを生成】アクション:ファイルAのハッシュ値が生成される→ハッシュ値A
- 【通知】アクション:
- 【ファイルを選択】アクション:ファイルB(比較・対象)を選択
- 【ハッシュを生成】アクション:ファイルBのハッシュ値が生成される→ハッシュ値B
- 【if文】アクション:ハッシュ値Aとハッシュ値Bを比較
- 一致した場合:【アラート】アクション:一致と表示しハッシュ値Aを表示させる
- 【if文・その他】
- 不一致の場合:【テキスト】アクション:ハッシュ値Aとハッシュ値Bを入れる
- 【アラート】アクション:不一致と表示し【テキスト】のハッシュ値を表示させる
- 【if文・終了】
実際のアクション配置状況は下記を参照してください。
(着目すべきポイントを赤矢印や赤枠で示します)
Step
2 ここがポイント、変数の扱い
ショートカットを利用する時に混乱するのは変数の処理です。 通常は、アクション出力の変数は次のアクションに線で結ばれて引き渡されます。 一方、線で結ばれていない別のアクションやスクリプト内で変数を使用するには、変数の受け手としたいテキストを右クリックし、「変数を挿入」>「変数を選択」から該当の変数をクリックすると、夫々のアクション出力が「変数を選択」として現れますので該当するアクション出力(=変数)を選択することで、変数がリンクされる様になります。
Step
3 「ハッシュ値比較」アプリの完成
以上の手順が完了したら、ショートカット編集画面の右上にある ▶ ボタンを押して実行します。 ファイルA、Bのハッシュ値の比較状況に応じて【アラートアクション】に以下が表示されます。
ハッシュ値 一致

ハッシュ値 不一致

完成したショートカットのバッジは以下です。 ▶ を押下すると、「ハッシュ値比較」アプリが実行できます。

【参考】シェルスクリプト・アクションを使ったショートカットアプリ
シェルスクリプト・アクションを使っても、ファイルのハッシュ値比較を行えます。 参考として、以下にシェルスクリプト・アクションを使った場合を示します。
事例紹介
-
-
参 照FLACとALACが元のWAVファイルに復元されるか?ハッシュ値で調べてみました。
過去の記事では、FLACやALACフォーマットをAudacity上で元のWAVファイルとの絶対誤差から復元(可逆性)を確認しました。 FLACやALACの可逆性を確認する方法の一つに「ファイルのハッシ ...






