import java.security.MessageDigest;
import java.io.FileInputStream;
import java.io.File;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import java.io.FileWriter;
public class MD5Create {
private static final char HEX_DIGITS[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F' };
static List<String> paths = new ArrayList<String>();
static String apklistfile = "./Md5Checklist.java";
public static void appendMethodB(String fileName, String content) {
try {
//打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
FileWriter writer = new FileWriter(fileName, true);
writer.write(content);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args)
{
String a,b;
String base=new String("00000000000000000000000000000000");
appendMethodB(apklistfile, "package android.util;\n");
appendMethodB(apklistfile, "public class Md5Checklist {\n");
appendMethodB(apklistfile, " private static final String[] checklist = {\n");
GetDirFiles(args[0],"apk",false);
for (int i = 0; i < paths.size(); i++)
{
base = StringAddFunction(base,paths.get(i));
}
System.out.println(base);
appendMethodB(apklistfile, " };\n\n");
appendMethodB(apklistfile, " public static String[] getMd5Checklist(){\n return checklist;\n }\n");
appendMethodB(apklistfile, "}\n");
}
public static String toHexString(byte[] b) {
StringBuilder sb = new StringBuilder(b.length * 2);
for (int i = 0; i < b.length; i++) {
sb.append(HEX_DIGITS[(b[i] & 0xf0) >>> 4]);
sb.append(HEX_DIGITS[b[i] & 0x0f]);
}
return sb.toString();
}
public static String StringAddFunction(String a, String b) {
StringBuilder sb = new StringBuilder(b.length() * 2);
int count=0;
int aa,bb;
for (int i = 0; i < b.length(); i++) {
if (a.charAt(i)>='A')
{
aa = a.charAt(i)-'A'+10;
}
else
{
aa = a.charAt(i);
}
if (b.charAt(i)>='A')
{
bb = b.charAt(i)-'A'+10;
}
else
{
bb = b.charAt(i);
}
count = bb+aa;
count= count%16;
sb.append(HEX_DIGITS[count]);
}
return sb.toString();
}
public static void GetDirFiles(String Path, String Extension, boolean IsIterative)
{
File[] files = new File(Path).listFiles();
File f;
String md5_add_value;
String md5_read_value;
if(files == null)
{
return;
}
for (int i = 0; i < files.length; i++)
{
f = files[i];
if(!f.canRead())
{
return;
}
if (f.isFile())
{
if (f.getName().contains(Extension))
{
paths.add(md5sum(f.getPath()));
appendMethodB(apklistfile, " \""+f.getName()+"\",\n");
}
}
else if (f.isDirectory())
GetDirFiles(f.getPath(), Extension, IsIterative);
}
}
public static String md5sum(String filename) {
InputStream fis;
byte[] buffer = new byte[1024];
int numRead = 0;
MessageDigest md5;
try{
fis = new FileInputStream(filename);
md5 = MessageDigest.getInstance("MD5");
while((numRead=fis.read(buffer)) > 0) {
md5.update(buffer,0,numRead);
}
fis.close();
return toHexString(md5.digest());
} catch (Exception e) {
System.out.println("error");
return null;
}
}
}
针对目录中文件创建MD5值
最新推荐文章于 2023-12-06 10:58:37 发布