2017-07-27 1293 views
0

我需要一种方法来计算某些文件的md5以确保Android中的完整性。 所以我使用org.apache.commons.codec.digest.DigestUtils.md5Hex方法来计算文件的md5,但我得到了不同的结果,因为我在我的linux系统中使用了md5sum。 md5sum的结果不能错,所以我不知道我的代码有什么问题。当我在java中使用DigestUtils.md5Hex时出现错误结果

情况如下(我用科特林,但它是一样的Java))代码:

val fd: AssetFileDescriptor = am.openFd("index.mp3") 
var result: String = "" 
val fis: FileInputStream = afd.createInputStream() 
val bf: ByteArray = fis.readBytes() 
val t: String = "md5sum" 
result = org.apaches.commons.codec.digest.DigestUtils.md5Hex(fis) 

我同时使用FIS和bf的md5Hex()的paramater,他们有不同的结果,但不是正确的结果。 但是,当我使用像“md5sum”这样的字符串时,我得到了和Linux中其他地方一样的结果。 有什么问题?

回答

0

我有一个UtilsEncrypt类来获得与型动物算法的哈希,但我使用java.security代替commons.codec.digest所以我进口:

import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 

这是我的代码

public class UtilsEncrypt { 

     /** 
     * @param digest 
        encrypted message 
     * 
     * @return String 
        result in Hexadecimal format 
     */ 
     private static String toHexadecimal(byte[] digest) { 
      String hash = ""; 
      for (byte aux : digest) { 
       int b = aux & 0xff; 
       if (Integer.toHexString(b).length() == 1) 
        hash += "0"; 
       hash += Integer.toHexString(b); 
      } 
      return hash; 

     } 

     /*** 
     * Encrypt a message through an algorithm 
     * 
     * @param message 
     *   text to encrypt 
     * @param algorithm 
     *   MD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512 
     * @return encrypted message 
     */ 
     public static String getStringMessageDigest(String message, String algorithm) { 
      byte[] digest = null; 
      byte[] buffer = message.getBytes(); 
      try { 
       MessageDigest messageDigest = MessageDigest.getInstance(algorithm); 
       messageDigest.reset(); 
       messageDigest.update(buffer); 
       digest = messageDigest.digest(); 
      } catch (NoSuchAlgorithmException ex) { 
       // Do something 
      } 
      return toHexadecimal(digest); 
     } 
    } 

正如你所看到的,我只使用java.security给我的功能。您可以将许多不同的算法传递给getStringMessageDigest。我有一个枚举与我使用的类型。也许你可以使用其他算法,但我没有与其他人一起测试过。 请注意重置diggest以确保您没有错误的内容,并且您将使用“空”diggest。

+0

我发现有什么问题,我无法使用md5算法来获取APK中的md5sum文件。由于APK是一个zip文件,因此按下的处理将更改数据。无论如何,谢谢! – Choogle

相关问题