在android java中的classes.dex的zipEntry中计算crc32

时间:2015-04-26 14:38:18

标签: java android

我想计算classes.dex的CRC32并比较它以检查是否被篡改

我正在考虑将其用作zipfile.getentry,如下所示:

try{
    ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), 0);
    ZipFile zf = new ZipFile(ai.sourceDir);
    ZipEntry zen = zf.getEntry("classes.dex"); 
}

然后计算classes.dex的crc32并将其作为字符串返回。

任何人都可以帮忙修复它。

我想(ZipEntry fname)计算我不想提取apk并使用classes.dex作为字符串来计算我想要zipentry在旅途中计算而不从应用程序中提取

2 个答案:

答案 0 :(得分:0)

import java.io.*;
import java.util.zip.CRC32;
import java.util.zip.Checksum;

public class ComputeCRC32 {
  public static long getChecksumValue(Checksum checksum, String fname) {
    try {
       BufferedInputStream is = new BufferedInputStream(
         new FileInputStream(fname));
       byte[] bytes = new byte[1024];
       int len = 0;

       while ((len = is.read(bytes)) >= 0) {
         checksum.update(bytes, 0, len);
       }
       is.close();
    }
    catch (IOException e) {
       e.printStackTrace();
    }
    return checksum.getValue();
    }

  public static void main(String[] args) {
    if (args.length != 1) {
      System.err.println("Usage: java ComputeCRC32 <file>");
      System.exit(1);
    }
    long cs = getChecksumValue(new CRC32(), args[0]);
    System.out.println("crc32 " + args[0] + " : " + cs);
  }
}

来源:http://www.rgagnon.com/javadetails/java-0416.html它还包含其他解决方案,在那里找到最合适的解决方案:)

答案 1 :(得分:0)

  

我想(ZipEntry fname)计算

好运,运气不好。

  

我不想提取apk并使用classes.dex作为字符串来计算我想要zipentry在旅途中计算而不从应用程序中提取

再次运气不好,你必须。