Java Content-MD5标头不匹配

Java Content-MD5标头不匹配,java,amazon-web-services,md5,amazon,Java,Amazon Web Services,Md5,Amazon,我正在尝试将内容从文件发送到AmazonDB。我生成的MD5哈希与Amazon生成的不匹配。我做错了什么 try { FileInputStream fis = new FileInputStream("upload.txt"); MessageDigest md = MessageDigest.getInstance("MD5"); byte[] buffer=new byte[8192]; i

我正在尝试将内容从文件发送到AmazonDB。我生成的MD5哈希与Amazon生成的不匹配。我做错了什么

  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


amazon:…AmY7PhCfg==

看起来amazon哈希使用的是base64,而您使用的是十六进制。如果使用base64库(),您应该不会有问题。(我无法用你文章中的值来验证这一点,因为它们不完整。但如果它不起作用,我会感到惊讶。)


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

看起来Amazon哈希使用的是base64,而您使用的是十六进制。如果使用base64库(),您应该不会有问题。(我无法用你文章中的值来验证这一点,因为它们不完整。但如果它不起作用,我会感到惊讶。)


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

thx,我认为我现在更进一步了。我通过了错误,遇到了另一个错误。“服务错误。响应状态:400。收到的消息:错误请求”这一次:(我不确定这是否与wron md5 sum.thx有关,我想我现在更进一步了。我传递了错误并遇到了另一个错误。“服务错误。响应状态:400。收到的消息:错误请求”这一次:(我不确定这是否与wron md5 sum有关。