2017-07-27 97 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

相關問題