0

我正在尝试将文件中的内容发送到 Amazon db。我生成的 MD5 哈希与亚马逊生成的不匹配。我究竟做错了什么?

  try {
        FileInputStream fis = new FileInputStream("upload.txt");                
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] buffer=new byte[8192];
        int read=0;
        while( (read = fis.read(buffer)) > 0)
                md.update(buffer, 0, read);
        byte[] md5 = md.digest();
        BigInteger bi=new BigInteger(1, md5);
        String output = bi.toString(16);
        System.out.println(output);
        SubmitFeed.submit(fis, output);
} catch(Exception e) { 
  // removed: not relevant to question
}

亚马逊向我报告的哈希似乎有不同的模式。

我的: ...5856911dca2be1 ...

亚马逊:...AmY7PhCfg==

4

1 回答 1

4

看起来亚马逊哈希使用的是 base64,而您使用的是十六进制。如果您使用 base64 库(例如这个),您应该没问题。(我无法用您帖子中的值验证这一点,因为它们不完整。如果它不起作用,我会感到惊讶。)

(我还建议不要BigInteger二进制转换为十六进制。它恰好能够做到这一点,模前导零,但这不是它的目的。)

于 2013-01-07T17:29:18.480 回答