[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [+]

Java で md5 コマンドを作る

概要

最近各所で入手できるファイルには、MD5 のチェックサムが(別ファイルで) 書かれているものがあります。 FreeBSD などでは md5 コマンドでチェックサムを計算できるようになって いますが、Windows などコマンドが標準でついていない OS もあります。
Java で書けばどこでも動くではないかとふと思い立ち、書いてみました。

java.security.MessageDigest

java.security パッケージに MessageDigest クラスがあります。これを 用いて、MD5 のチェックサムを計算できます。(ちなみに、SHA のチェック サムも計算できます。)
使い方は、まず、getInstance() クラスメソッドでインスタンスを得ます。 次に、update() メソッドでデータを渡していきます。最後に、digest() メソッドでダイジェスト(チェックサム)が byte の配列で得られます。
あ、それだけです。よくわかっていなくても使えてしまうところがなんとも 言えません…。

ソースコード

あまり人にお見せできるものでもないのですが、動きますので…。
ちなみに、FreeBSD の JDK1.1.8 および Windows の Java2 SDK 1.3 で動作 しております。

import java.security.MessageDigest;
import java.io.FileInputStream;

public class md5 {
    public static void main(String a[]) {
	try {
	    MessageDigest md = MessageDigest.getInstance("MD5");
	    for(int i=0; i<a.length; i++) {
		FileInputStream in = new FileInputStream(a[i]);
		byte[] dat = new byte[256];
		while(true) {
		    int len = in.read(dat);
		    if(len < 0) break;
		    md.update(dat, 0, len);
		}
		in.close();
		byte[] ddata = md.digest();
		System.out.print("MD5 (" + a[i] + ") = ");
		for(int j=0; j<ddata.length; j++) {
		    int r = (ddata[j] >= 0) ? ddata[j]:(256+ddata[j]);
		    if(r < 0x10) {
			System.out.print("0");
		    }
		    System.out.print(Integer.toString(r, 16));
		}
		System.out.println();
	    }
	} catch (Exception e) {
	    e.printStackTrace();
	}
    }
}

try〜catch で囲ってますが、catch するのが Exception で printStackTrace() しているだけですので、おもいっきり手抜きです。すみません…。

Powered by Apache PostgreSQL Usupi Logo Kuri Logo
[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [-]
usu@usupi.org Last modified : Wed Jun 6 14:34:35 2001