chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

メモ:cmd.extしか使えないWindows環境でハッシュ値を計算

諸般の事情でcmd.exeしか使えない(power shellも不可)。この状況でハッシュ値(sha256 base64形式)を計算する方法
遠回りでしかないが、、そんな状況もあるということで。。

# certutilを使ってSHA256を生成
# 生成されるのは、SHA256をHEXダンプした形式(base64ではなくHEXダンプ)
$ certutil -hashfile test.txt  SHA256  >  test_hash.txt  

# file: test_hash.txt
# SHA256 ハッシュ (対象 test.txt):
# 259f34df2acdfdbe23fb8963e8f6e62dcefdb0cabe627d42064246118bb00e1f
# CertUtil: -hashfile コマンドは正常に完了しました。

#
#test_hash.txt には前後余計な説明があるのでこれを取り除く
#

# file: test_hash_stip.txt
# 259f34df2acdfdbe23fb8963e8f6e62dcefdb0cabe627d42064246118bb00e1f
#

# 上記はbase64形式ではなくHEXダンプ。。要求仕様に合わない
# base64形式にするため、HEXダンプ形式をバイナリに戻す
$ certutil -decodehex test_hash_strip.txt  test_hash.bin

# certutil encodeを使ってバイナリ形式(のハッシュ値)をBASE64形式に変換
$ certutil -encode  test_hash.bin   test_hash.txt

# file: test_hash.txt
# -----BEGIN CERTIFICATE-----
# JZ803yrN/b4j+4lj6PbmLc79sMq+Yn1CBkJGEYuwDh8=
# -----END CERTIFICATE-----

# test_hash.txtには余計な説明があるのでこれを取り除く

# file: test_hash.txt
# JZ803yrN/b4j+4lj6PbmLc79sMq+Yn1CBkJGEYuwDh8=

# base64形式のハッシュ値ができる

opensshが使えたら以下

$ openssl dgst -sha256 -binary test.txt | openssl enc -base64
JZ803yrN/b4j+4lj6PbmLc79sMq+Yn1CBkJGEYuwDh8=

cmd.exe環境のcertutilコマンドをこねくりまわしたbase64形式のSHA256ハッシュ値と、linux/WSL環境で作ったハッシュ値は一致する