メッセージダイジェストを取得するコマンド
id:ha-tan:20051026:1130255822と同じようなアイディアで、Rubyに取り込まれているメッセージダイジェストの機能を簡単なスクリプトで呼出せるようにしてみました。ファイル名を「md5」「sha1」「sha256」「sha384」「sha512」とすることで、ファイル名に相当するメッセージダイジェストを計算することができます。
#!/usr/bin/env ruby # -*- ruby -*- alg = File.basename($0).upcase case alg when 'MD5' require 'digest/md5' when 'SHA1' require 'digest/sha1' when /^SHA(?:256|384|512)$/ require 'digest/sha2' else $stderr.puts "invalid filename: #{alg}" exit 1 end ARGV.each do |filename| digest = Digest.const_get(alg).new open(filename, 'r') do |file| while buf = file.read(1024) digest.update(buf) end end puts "#{alg} (#{filename}) = #{digest.hexdigest}" end
実行例:
$ ./sha256 /bin/ls SHA256 (/bin/ls) = fbe58b641a2f6dd9bf1bbf963331d07c4cc09546084549e24a89757cb793f60a
NetBSD-2.0.2にはsha256以上を扱えるコマンドが入っていない(と思う)ので、それなりに使えるかも。
sha256以上はOpenSSLも0.9.8系からなんですよね(NetBSD-2.0.2には0.9.7系が入っています)。