linuxのmd5sumコマンドと同じ出力をjavaで取得する
md5sum/opensslコマンドで取得したハッシュ値と同じ値をjavaで取得したいのですが
期待した結果がえられません。
同じ結果を得るにはjavaでどのように書いたらよいのでしょうか?
(1)md5sum/opensslコマンドの場合
$ echo abc | md5sum
0bee89b07a248e27c83fc3d5951213c1 -
$ echo abc | openssl md5
(stdin)= 0bee89b07a248e27c83fc3d5951213c1
$
(2)javaプログラムの場合(Apache Common Codec, MessageDigest)
・ソース
package test;
import java.math.BigInteger;
import java.security.MessageDigest;
import org.apache.commons.codec.digest.DigestUtils;
public class Md5sum2 {
public static void main(String[] args) {
String str = "abc";
// 1. MessageDiget
try {
byte[] input = str.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] md5 = md.digest(input);
BigInteger bigInt = new BigInteger(1, md5);
String result = bigInt.toString(16);
System.out.println("result : " + result);
} catch(Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
// 2. Apache Commons Codec
String out = DigestUtils.md5Hex(str);
System.out.println("result : " + out);
}
}
・実行結果
$ java -cp ~/.m2/repository/commons-codec/commons-codec/1.10/commons-codec-1.10.jar:. test.Md5sum2
result : 900150983cd24fb0d6963f7d28e17f72
result : 900150983cd24fb0d6963f7d28e17f72
$