関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。忘れないうちにメモメモ。。
CRC32を得る必要があるときがたまにあります。
crc32
コマンドが入っていれば、コマンド一発で得られるのですが、crc32
コマンドは例えばdebian系だと libarchive-zip-perl
をインストールしないといけません。python使っても求めれますが、一旦これは置いておいて。
事情があって、crc32
コマンドを入れることが出来ないときは、gzipコマンドの出力からでも得られれます。
RFC 1952 - GZIP file format specification version 4.3
にあるように、gzipの末尾は CRC32 で 4バイト、ISIZEで4バイトとなっています。
なので、以下のようにすれば取れます。
$ gzip -1 -c /path/to/file | tail -c 8 | head -c 4 | hexdump -e '"%08x"'
こんな感じになります。
$ crc32 main.go 3db480c7 $ gzip -1 -c main.go | tail -c 8 | head -c 4 | hexdump -e '"%08x"'; echo '' 3db480c7
gzipコマンドの -1
は、最も速い圧縮という指定で圧縮率は低くなるけど速度が上がります。CRCを取りたいだけなので圧縮効率は必要ありません。-c
は圧縮結果を標準出力に出してって指定です。パイプで末尾の8バイトを抜き出して、そこから先頭4バイトを抜き出して、最後にhexdumpで書式指定して出力。
末尾の echo は、改行のために入れているだけです。
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。