こんばんは、FujiNextNetです。

 

 

Macに入っているターミナルというアプリでハッシュ値の確認・計算(算出・演算)をして、

コピーした物が同一のものであるかの確認をする。

というお話になります。

 

ハッシュ値は、写真や動画を扱う人などは、よく使いますね。

 

コピーした物が同一の物かどうかの確認ができます。

 

コピー時に何かしらのエラーがありノイズが入った、何か破損したなどの時は

もちろん別の物になってしまうので、ハッシュも変わります。

 

ハッシュ値の計算には有名なものでMD5SHA-1SHA-2(SHA-256)などがあります。

 

MD5SHA-1は普及していて、今現在も非常に多く使われています。

 

業務では、MD5を多く使っています。

私は個人的にSHA-256も確認で使用していますが、

コピーしたものが同一のものであるかの確認はMD5で十分だと思います。

セキュリティ関連ではSHA-256レベルでも弱いというお話を伺ったことがありますが、僕はそのようなことに詳しくないので、パルプンテです。

 

 

それでは、ハッシュ値の算出ですが、

アプリのターミナルを立ち上げます。

 

 

MD5

md5(半角スペース)複数ファイルをドラッグ&ドロップ

または

openssl md5(半角スペース)複数ファイルをドラッグ&ドロップ

(数値は変わりません)

 

SHA-1

openssl sha1(半角スペース)複数ファイルをドラッグ&ドロップ

または

shasum -a 1(半角スペース)複数ファイルをドラッグ&ドロップ

(数値は変わりませんが、記載が後ろか前かになります)

 

SHA256

shasum -a 256(半角スペース)複数ファイルをドラッグ&ドロップ

 

そして、「Returnキー(Enterキー)」を、バチン!

たったのこれだけです。

 

 

openssl md5例

 

 

 

001~018までの拡張子がpngやjpgの画像データを使ってみます。

001という名のフォルダにコピー元のその18枚の画像を入れ、

a001という名のフォルダにコピーした18枚の画像を入れ、

a002という名のフォルダには、同じように18枚コピーして、イタズラで001.pngのみ渦巻きを描いて落書きをしてみました。

 

001フォルダ

 

a001

 

a002

 

 

 

 

MD5でハッシュ値を算出してみると

001フォルダ

 

a001フォルダ

 

a002フォルダ

 

細かい字ですが、見比べてみるとa002の001pngのみ差異があるのが分かります。

それですので、a001のコピーは上手くいった。

a002のコピーは001.pngのみエラーがあったので、再度「001.png」のコピーしよう。

となります。

 

 

 

今度はSHA256でハッシュ値を算出してみる

 

001フォルダ

       ⬇︎

 

 

a001フォルダ

       ⬇︎

 

 

a002フォルダ

       ⬇︎

 

これまた細かい字ですが、見比べてみるとa002の001pngのみ差異があるのが分かります。

同じく、a001のコピーは上手くいった。

a002のコピーは001.pngのみエラーがあったので、再度「001.png」のコピーしよう。

となります。

 

 

このようにして、コピーしたものが同一であるかの確認ができます。

 

 

コピー時に、

自動でそれをして安全性を持ってコピーしてくれるものは無いのか?

というとあります。

 

有名どころで、MacではRapidCopy

ベリファイというチェック項目がありますが、

そのベリファイが、それに当たります。

同時にハッシュ値の算出もして、エラーがあった場合は、最下段の項目に記載されます。

複数コピーする場合は、エラーファイルをスキップして、

コピーを進行してくれますので便利ですね。

 

WindowsではFastCopyですね

同じくベリファイがあります。

 

 

しかし、1つ僕が知っている問題では、バックアップを外付けHDDにしますが、

その時にアプリケーションをRapidCopyで安全にコピーしようと思いコピーすると、

実は、開発元がRapidCopyとなり、立ち上げられなくなるアプリがあります。

まぁ、再DLすれば良いだけなのですが、複数ある場合にはその分手間が掛かるのでご注意ください。

その際は、Mac機能の純粋なバックアップ(Time Machine)やコピー機能でコピーすることをお勧めします。

 

因みに、コピーソフトのベリファイで使われやすいxxHashというものもあります。

算出の複雑レベルは

複雑 SHA-256

   ↑

   MD5、SHA-1

   ↑

簡単 xxHash

という具合

 

同じくその衝突の可能性のレベルも

低い SHA-256

   ↑

   MD5、SHA-1

   ↑

高い xxHash

という具合

 
破損等の検出は

SHA-256 ≒ MD5・SHA-1 ≒ xxHash

という具合でしょうか?
 
一言で言えば、負荷が少ない。
 
それですので、ベリファイには特に役立つ算法なのだと考えられます。
 
詳しい方がいて訂正がありましたら、ご教示頂けますと幸いです。