ダウンロードしたファイルが正しいかチェックするためにSHA-1のチェックサムを利用していることはよくあることですが、WindowsでSHA-1とかのダイジェストを得るためにはフリーウェアとかを使ったりします。その手のツールは便利でいいのですが、インストールするのが気が引けたりするので、そのくらいならJAVAでさくっとできないものかと思って、とりあえず作ってみました。
とりあえずなので、基本的なコンセプトは以下のような感じ。
- Windowsなので結果をウィンドウで表示する
- いわゆるメッセージボックスのようなもので計算結果を表示する。
- 機能は限りなくシンプル
- こういうツールを作ろうとすると、いろいろ便利にしたくなるのですが、とりあえずは簡単なものにする。
- エラーぐらいは表示
- エラーが出ても突っ走って、何も表示されないと悲しいので、エラーメッセージぐらいは表示しようということ。
とりあえず、ソースコードはこちら。ちなみにソースコメントは入れてないです。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.swing.JOptionPane;
public class FileDigest {
protected static int READ_SIZE = 1024;
protected static String DIGEST_ALGORITHM = "SHA-1";
protected static String DIALOG_TITLE = "File Digest Tool";
protected MessageDigest messageDigest;
public static void main(String[] args) {
if (args.length == 0) {
messageOut("No taget file.", true);
System.exit(1);
}
FileDigest fileDigest = new FileDigest();
try {
fileDigest.setFile(args[0]);
} catch (FileNotFoundException e) {
messageOut(String.format("File not found (%s).", args[0]), true);
System.exit(2);
} catch (IOException e) {
messageOut("File read error.", true);
System.exit(3);
}
messageOut(fileDigest.digestString(), false);
}
public FileDigest() {
try {
messageDigest = MessageDigest.getInstance(DIGEST_ALGORITHM);
} catch (NoSuchAlgorithmException e) {
System.exit(4);
}
}
public void setFile(String pathName) throws FileNotFoundException, IOException {
FileInputStream inStream = new FileInputStream(pathName);
DigestInputStream digestStream = new DigestInputStream(inStream, messageDigest);
byte readBuffer[] = new byte[READ_SIZE];
while (digestStream.read(readBuffer) > 0);
}
public String digestString() {
byte codeList[] = messageDigest.digest();
String digest = new String();
for (byte code : codeList) {
digest += String.format("%x", code);
}
return digest;
}
protected static void messageOut(String message, boolean isError) {
JOptionPane.showMessageDialog(
null, message, DIALOG_TITLE,
isError ? JOptionPane.ERROR_MESSAGE : JOptionPane.INFORMATION_MESSAGE);
}
}
- ソースをコンパイルして.classファイルを作成
- その方法は説明するまではないと思いますが、普通にやれば「FileDigest.class」というファイルができるはず。
- デスクトップにショートカットを作成
- explorerで右クリックして、「送る」のサブメニューのデスクトップを選択する。
- できあがったショートカットのプロパティを表示
- リンク先の変更
- このときリンク先は、FileDigest.classのフルパスになっているので、「javaw FileDigest」(FileDigest.classではない)に変更する。 作業フォルダはそのままにしておく(CLASSPATHの代わり)。
これで、ショートカットから、ツールが起動できるはず。うまくいけば、アイコンがJAVAのものに変わる。 ちなみに単にそのショートカットで起動すると「No target file.」と書いてあるメッセージボックスが表示されます。ダイジェストを計算したいときは、explorerからこのショートカットへドラッグ&ドロップすると、計算結果がメッセージボックスで表示されます。