亀の甲羅2

今日もまた朝とく起きて励まなん窓に明るきありあけの月

【powershell】Get-FileHashによるハッシュ取得にかかる時間

ファイルの同一性を示すのにハッシュ使えばいいのでは?って会社で言ったら、時間かかるんじゃないの~?と不要な心配をする方がいたのでデータを取ってみる。

目次

本文

1. ファイルサイズが大きい場合

1.1 テストファイル

以下のISOファイルをテストに使用する。

3968434176 Bytes(about 3.8GB) debian-11.0.0-i386-DVD-1.iso       

1.2 実測

一応3回ずつ計測したが、大して差がなかったので初回の結果だけ掲載する。

2021年9月5日 22:26:24

Algorithm : MD5
Hash      : CFD45B47C623AFD0CCACFF3C21830853
Path      : D:\hisabo\Downloads\debian-11.0.0-i386-DVD-1.iso

2021年9月5日 22:26:35

11sec
2021年9月5日 22:28:38

Algorithm : SHA256
Hash      : 2B6D2CF276703DFD5EEE6F0F8A03E1FBF1ECE5585019FFCFE18990EDC5C59FA0
Path      : D:\hisabo\Downloads\debian-11.0.0-i386-DVD-1.iso

2021年9月5日 22:29:00

22sec
2021年9月5日 22:30:57

Algorithm : SHA512
Hash      : 57024D281490327A8EEE9F010D96D2234986A360C43E34B79A55B01C5151984537F42ED751A0663FFFF5A8A04C89E9F51F73C2BDBC9820B1F64EDEF16F9CE42D
Path      : D:\hisabo\Downloads\debian-11.0.0-i386-DVD-1.iso

2021年9月5日 22:31:11

14sec

SHA256 が一番時間がかかることが分かった。

2. ファイル数が大きい場合

1.1 テストファイル

デジカメで撮った画像ファイル群をテストに使用する。
HDD上に配置し、各ファイルサイズは250kb~5MB程度である。 フォルダの状況は下記の通り。

ファイル数: 10,002、フォルダー数: 0
20.9 GB (22,457,794,560 バイト)

1.2 実測

量が多いので1回ずつ。

(1)MD5

開始:2021年9月7日 22:01:07
終了:2021年9月7日 22:04:28
201sec

(2)SHA256

開始:2021年9月7日 22:16:00
終了:2021年9月7日 22:19:33
213sec

(3)SHA512

開始:2021年9月7日 22:19:55
終了:2021年9月7日 22:25:56
361sec

コードは以下の通り。SHA512で時間がかかったのは、logファイルにハッシュ値をout-Fileしているからかもしれない。 SHA512がハッシュ値としては一番長く、書きだす量も多くなる。

# MD5, SHA128,SHA512で実施(logファイル名、Algorithm を適宜変更)
$log = "SHA512.log"

$a = Get-ChildItem -Recurse -Path "Work"

Get-Date| Out-File -FilePath $log -Append

$a | %{ Get-FileHash -Algorithm SHA512 $_.FullName } | Out-File -FilePath $log -Append

Get-Date| Out-File -FilePath $log -Append

 

3. ハッシュ値を取得するのに時間がかかるか?

どのくらいを目標値とするかは人それぞれだと思うが、それほど頻繁に行う作業でもないので上記くらいの処理時間は「速い」と私は感じる。


バージョン情報

> $PSVersionTable

Name                           Value                                                                                                          
----                           -----                                                                                                          
PSVersion                      5.1.19041.1023