私の要件は、ローカル ディスク上のファイルとデータベースからダウンロードしたファイルの MD5 ハッシュを比較することです。ファイルは、SQL Server の VARBINARY(MAX) 列に格納されます。ファイルは任意のタイプにすることができます。現在、PDFファイルでテストしています。HttpPost リクエストを使用して、データベースからファイルを取得します。JSONObject は、HttpResponse オブジェクトを使用して構築されます。JSONObject には、ファイルの内容がバイナリ形式で含まれています。
次に、受信したバイナリ データの MD5 ハッシュを、ディスク上の同じファイルの MD5 ハッシュと比較する必要があります。次のコードを書きましたが、MD5 ハッシュが一致しません。ダウンロードしたバイナリ コンテンツの MD5 を単純に計算するのは間違っていると思います。これを行う正しい方法はありますか?前もって感謝します。
// Read response from a HttpResponse object 'response'
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line="";
StringBuilder sb = new StringBuilder();
while((line=reader.readLine())!=null) {
sb.append(line);
}
// construct jsonobject
JSONObject jsonResponse = new JSONObject(sb.toString());
//Read file from disk
FileInputStream fis = new FileInputStream(new File(this.getClass().getResource("C:\\demo.pdf").getPath()));
// Calculate MD5 of file read from disk
String md5Request = org.apache.commons.codec.digest.DigestUtils.md5Hex(fis);
// Calculate MD5 of binary contents. "binfile" is name of key in the JSONObject
// and binary contents of downloaded file are in its corresponding value field
String md5Response = org.apache.commons.codec.digest.DigestUtils.md5Hex(jsonResponse.getString("binfile"));
Assert.assertEquals("Hash sums of request and response must match", md5Request, md5Response);
デバッグすると、JSONObject 'jsonResponse' の binfile キーに対してこの値が表示されます
binfile=[37,80,68,70,45,49,46,52,13,37,-30,-29,-49,-45,13,10,52,48...]
その後に続くのは、バイナリ データの長いストリームです。