Java Content-MD5标头不匹配

时间:2013-01-07 17:27:42

标签: java amazon-web-services md5 amazon

我正在尝试将文件中的内容发送到Amazon数据库。我生成的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 ==

1 个答案:

答案 0 :(得分:4)

看起来亚马逊哈希正在使用base64,而你正在使用hex。如果你使用base64库(such as this one),你应该没问题。 (我无法用你帖子中的值来验证,因为它们不完整。如果它不起作用,我会很惊讶。)

(我还建议使用BigInteger作为将二进制转换为十六进制的方法。它碰巧能够做到这一点,模数为前导零,但它不是它的目的。)