2017-07-27 10 views
0

Androidのインテグリティを確実にするためにいくつかのファイルのmd5を計算する方法が必要です。 私はorg.apache.commons.codec.digest.DigestUtils.md5Hexメソッドを使用してファイルのmd5を計算しますが、私のLinuxシステムではmd5sumを使用したのとは異なる結果になります。 md5sumの結果は間違っている可能性がないので、私のコードに何が問題なのか分かりません。JavaでDigestUtils.md5Hexを使用すると間違った結果が出る

コード(私はkotlinを使用しますが、それは、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) 

私はmd5Hex(ののparamaterとしてFISとBFの両方を使用)、彼らは異なる結果を持ってではなく、正しい結果。 しかし、 "md5sum"のような文字列を使うと、Linuxのように他の場所と同じ結果になります。 どうしたの?ので、私の輸入は

答えて

0

私は貴様アルゴリズムとハッシュを取得するUtilsEncryptクラスを持っていますが、私が代わりにcommons.codec.digestのjava.securityを使用しています:

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にはさまざまなアルゴリズムを渡すことができます。私は、私が使用するalの型を持つenumを持っています。別のアルゴリズムを使用することもできますが、他のアルゴリズムではテストしませんでした。 diggestをリセットして、内容が間違っていないことを確認して、空のdiggestで作業するようにしてください。

+0

私は何が間違っているのか分かりました。私はmd5アルゴリズムを使用してAPKのmd5sumファイルを取得することはできません。 APKはzipファイルなので、押された処理によってデータが変更されます。何でも、ありがとう! – Choogle

関連する問題