GNKF: NKF ぽいなにか の v0.5.0 をリリースした

no extension

Go 言語における文字列処理の習作 gnkf の v0.5.0 をリリースした。

このバージョンでデータのハッシュ値を取得・検証する機能を追加した。

$ gnkf hash -h
Print or check hash value.
  Support algorithm:
  MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256

Usage:
  gnkf hash [flags] [file]

Aliases:
  hash, h

Flags:
  -a, --algorithm string   hash algorithm (default "SHA-256")
  -c, --check              don't fail or report status for missing files
  -h, --help               help for hash
      --ignore-missing     don't fail or report status for missing files (with check option)
      --quiet              don't print OK for each successfully verified file (with check option)

Global Flags:
      --debug   for debug

MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, および SHA-512/256 各アルゴリズムに対応している1。 既定のアルゴリズムは SHA-256 で,それ以外を使う場合は

$ echo Hello World | gnkf h -a md5
e59ff97941044f85df5297e1c302d260  -

などとアルゴリズム名を指定する。

また,リリースファイルに対して gnkf_0.5.0_checksums.txt のようなハッシュ値の情報があれば, -c オプションを使って

$ curl -L https://github.com/spiegel-im-spiegel/gnkf/releases/download/v0.5.0/gnkf_0.5.0_checksums.txt -O
$ curl -L https://github.com/spiegel-im-spiegel/gnkf/releases/download/v0.5.0/gnkf_0.5.0_Linux_64bit.tar.gz -O
$ gnkf h --ignore-missing -c gnkf_0.5.0_checksums.txt
gnkf_0.5.0_Linux_64bit.tar.gz: OK
WARNING in 9 items: no such file or directory

といった感じにダウンロードしたファイルの検証を行うことができる。

まぁ Linux とかなら sha256sum コマンド等を使えばいいのだけど, Windows 環境で互換性のあるコマンドが見当たらなかったので gnkf に組み込んでみたのだった。 以前に BASE64 符号化のサブコマンドを組み込んだことがあったので,これもありかなと(笑)

余談だが Go で MD5 や SHA-1 アルゴリズムを使うと gosec に叱られる。 これを回避するには G501 および G505 のワーニングを除外すればよい。

たとえば

$ golangci-lint run --enable gosec --exclude "G501|G505"

みたいな感じ。

ブックマーク

参考図書

photo
プログラミング言語Go
アラン・ドノバン (著), ブライアン・カーニハン (著), 柴田芳樹 (著)
丸善出版 2016-06-20 (Release 2021-05-21)
Kindle版
B094PRR7PZ (ASIN)
評価     

Kindle 版出た! 一部内容が古びてしまったが,この本は Go 言語の教科書と言ってもいいだろう。感想はこちら

reviewed by Spiegel on 2021-05-22 (powered by PA-APIv5)


  1. SHA-3 は標準パッケージにないので今回は見送った。ちなみに golang.org/x/crypto/sha3 パッケージを使えば SHA-3 アルゴリズムも簡単に組み込める。 ↩︎