pools.jp | osxで使えるsha1sumをrubyで実装してみた


osxで使えるsha1sumをrubyで実装してみた

checksumをするのにsha1を使う場合Linuxではsha1sumを使うけど、OSXにはこのコマンドがありません。
そこでsha1chkなるツールを作ってみました。

仕様はwikipediaにあるsha1sumの説明を参考にして、rubyのDigest::SHA1で実装。
ダウンロードは以下から。(早速チェックサムとってみたw)

download sha1chk.tgz
SHA1 Checksum: 117b91cdde66d2ce0a59fbf247a118f6943d7fb3

インストール

今のところインストーラのようなものはないので適当にパスを通してもらえればコマンドとして利用できます。
たとえばこんな感じで。sha1chkを~/Downloadsにダウンロードした前提で。

$ mkdir ~/tool
$ mv ~/Downloads/sha1chk.tgz ~/tool/
$ tar xzvf ~/tool/sha1chk.tgz
$ chmod 755 ~/tool/sha1chk
$ sudo ln -s ~/tool/sha1chk /usr/local/bin/sha1chk

テスト

取ってきたsha1chk.tgzのダイジェストを取ってみて以下のように表示されていればOK

$ sha1chk ~/tool/sha1chk.tgz
117b91cdde66d2ce0a59fbf247a118f6943d7fb3

使い方

さっさと使いたい方は

$ sha1chk --help

を読んでください。

【使用法1】ファイルのチェックサムを取得する

オプションなしでファイルを引数に渡すとダイジェストを返します。

$ sha1chk somefile
da39a3ee5e6b4b0d3255bfef95601890afd80709

一応、サイズの大きなファイルにも対応しているつもりです。
(MacBookメモリー2G上で7Gのイメージファイルをテストしました。時間はかかるけど問題なく動作)

【使用法2】.sha1ファイルの利用

OSのイメージファイルなんかではsha1ファイルが用意されているケースもあります。
チェック対象のファイルが同階層にある前提で動作します。

$ ls
somefile
somefile.sha1

この前提でsomefileのダイジェストとsomefile.sha1に書いてある値を比較します。

$ sha1chk -c somefile.sha1
somefile OK

一致する場合はOK。一致しない場合はNG。

【使用法3】文字列からsha1ダイジェストを取得する

最後に文字列からsha1のダイジェストを取得する方法です。もともとsha1sumでは対話モードで実装されているらしいのですが、sha1chkではオプションを付け対話式ではない機能として実装しました。

$ sha1chk -c somestring
da63fb69aeb03c776bd23e91e2c1cb3df30135d3

まとめ

irbでささっとやれることをわざわざツールとして実装してみたのですが、やってみるとoptparseや大きなファイルを扱う処理を実装できて面白かったです。ツールとしても普通に使えるモノになってると思います。気が向いたら使ってみてください。


Posted at Sunday, April 27th, 2008comment (0) | trackback | category: ruby

Read More

Related Reading:


Leave a Reply

Note: Any comments are permitted only because the site owner is letting you post, and any comments will be removed for any reason at the absolute discretion of the site owner.