1

サーバーからダウンロードしたファイルのmd5sumを一致させようとしています。合計が一致する場合にのみ処理が続行されます。

try {
      MessageDigest digest = MessageDigest.getInstance("MD5");
      File f = new File(fileName);
      InputStream is = new FileInputStream(f);              
      byte[] buffer = new byte[8192];
      int read = 0;
      while( (read = is.read(buffer)) > 0) {
          digest.update(buffer, 0, read);
      } 
      is.close();
      byte[] md5sum = digest.digest();
      BigInteger bigInt = new BigInteger(1, md5sum);
      output = bigInt.toString(16);
      System.out.println("MD5: " + output);
  } catch(IOException e) {
      throw new RuntimeException("Unable to process file for MD5", e);
  } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
  }

上記のコードは、一部のファイルに対して毎回md5sumを適切に提供しません。

コンソールに移動して、md5sum <filename>md5sumがサーバーのものと同じであることを確認します。しかし、同じものをコードから計算すると、異なる結果が得られます。

ダウンロードしたファイルのvimdiffは差分を提供していません。ダウンロード後のファイルは適切です。

上記のコードで問題を確認できません。

バッファサイズを変更しようとしています。でも運が悪いので、バッファサイズなどのせいではないと思います。

 byte[] buffer = new byte[8192];

よろしく
DheerajJoshi

4

1 に答える 1

1

BigInteger.toString メソッドは、先頭の 0 は重要ではないため、エスケープします。

BigInteger.toString メソッドは先頭の 0 を削除しています

于 2012-04-23T06:43:03.813 に答える