Android java端添加v2签名获取

import TeenPatti1.MD5Util;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.model.FileHeader;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;

public class v2签名 {

public static void main(String[] args) {
    File file = new File("aaaaa.apk");
    ZipFile zipFile = new ZipFile(file);
    try {
        List<FileHeader> fileHeaderList = zipFile.getFileHeaders();
        FileHeader fileHeader = fileHeaderList.get(fileHeaderList.size() - 1);
        long offset = fileHeader.getOffsetLocalHeader()
                + fileHeader.getFileNameLength()
                + fileHeader.getFileCommentLength()
                + fileHeader.getExtraFieldLength()
                + fileHeader.getCompressedSize() + 30;
        FileInputStream fileInputStream = new FileInputStream(file);
        fileInputStream.skip(offset);
        int signDataTotal = 0;
        while ((signDataTotal = fileInputStream.read()) == 0) {

        }
        System.out.println(signDataTotal);
        for (int i = 8; i < 64; i += 8) {
            signDataTotal |= fileInputStream.read() << i;
        }
        System.out.println(signDataTotal);
        long long1 = readLong(fileInputStream);
        int crc = readInt(fileInputStream);
        System.out.println(crc);
        if (crc != 1896449818) {
            throw new Exception("");
        }
        int int1 = readInt(fileInputStream);
        int int2 = readInt(fileInputStream);
        int int3 = readInt(fileInputStream);
        int headInt1 = readInt(fileInputStream);
        fileInputStream.skip(headInt1);
        int int4 = readInt(fileInputStream);
        int int5 = readInt(fileInputStream);
        System.out.println(int5);
        byte[] bytes = new byte[int5];
        fileInputStream.read(bytes);
        if (int5 - 4 != (bytes[2] * 0x100) + (bytes[3] & 0xFF)) {
            throw new Exception("长度出问题");
        }
        System.out.println(MD5Util.byte2MD5(bytes));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private static final long readLong(InputStream inputStream) throws Exception {
    return inputStream.read()
            | inputStream.read() << 8
            | inputStream.read() << 16
            | inputStream.read() << 24
            | inputStream.read() << 32
            | inputStream.read() << 40
            | inputStream.read() << 48
            | inputStream.read() << 56;
}

private static final int readInt(InputStream inputStream) throws Exception {
    return inputStream.read()
            | inputStream.read() << 8
            | inputStream.read() << 16
            | inputStream.read() << 24;
}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容