【PowerShell】タイムスタンプは信用できないからハッシュで確認する【Get-FileHash】

【PowerShell】タイムスタンプは信用できないからハッシュで確認する【Get-FileHash】

※2019/6/13 タイトル変更しました。

はじめに

コジマです。

この記事は

  • Windowsを使用したレガシーめの業務に携わる方々
  • PowerShellの知見を少し深めたい
  • タイムスタンプ信用ならん、ワカル…

という人向けに書いています。

本当にタイムスタンプを信用していいのか?

今でもレガシーなプロジェクトだとタイムスタンプでファイルの整合性を確認しようとする人がいます。

本当にタイムスタンプを信用していいのか?
という所なのですが、盛大にNoを叩きつけたい。

単刀直入に言うと
簡単に改ざんできてしまうから!

試験環境のファイルが正しく本番環境に適用できたことを確認するために
タイムスタンプ見て「OKだね」とか本当は…言いたくない…。

知らないうちにデグレしてる!なんてことになります。

タイムスタンプはPowerShellでめっちゃ簡単に変更できます。
Linuxでもtouchコマンドで変更可能なのですが、今回はPowerShellを例にお話していきます。

*作成日時を変更できちゃう
Set-ItemProperty "ファイル名orフォルダ名" -Name CreationTime -Value "YYYY/mm/dd HH:MM:SS"

*更新日時を変更できちゃう
Set-ItemProperty "ファイル名orフォルダ名" -Name LastWriteTime -Value "YYYY/mm/dd HH:MM:SS"

「PowerShell タイムスタンプ」とかググってあげると山ほど記事が出てきます。
ここで終わってはただのコピー記事になってしまうので、もう少し踏み入りたいと思います。

じゃあどうすればいいの?

じゃあファイルの中身が変更されたのをどう確認すればいいの?という話になると思います。
2つのファイルを比較するCompare-Objectもあるのですが、
同じであることを担保するために最適だと思う方法はファイルのハッシュ値を確認することです。

そのためにGet-FileHashというコマンドが使えます。
ファイルの中身をハッシュ値に変換するので、中身が同じであればハッシュ値も同じになります。

試験環境のファイルと本番環境のファイルのハッシュ値が同じであれば
正真正銘中身が同じファイルだということが証明できますね!

それでもデグレとか言う事態になったら
試験漏れです!出直しましょう!

*ファイルのハッシュ値を取得するコマンド
Get-FileHash "ファイル名" -Algorithm アルゴリズム

です。
ハッシュ化のアルゴリズムは

  • SHA1
  • SHA256(デフォルト)
  • SHA384
  • SHA512
  • MD5

の5種類を指定できます。そこはお好みでOKです!
指定しない場合はデフォルトのSHA256になります。

ハッシュ値を比較した結果異なった場合に
Compare-Objectを実行すると良いかと思いますが、WinMergeあたりを使うのが主流かと思いますので
あまり出番はないかな、というのが主観です。

さいごに

軽くまとめると

  • タイムスタンプは簡単に改ざんできるから信用できん
  • ハッシュ見た方がいいよ
  • それで間違ってたらドンマイ

という感じです。

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

以上、コジマでした。


PowerShellカテゴリの最新記事