Buscar

DigestCalculator

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DigestCalculator {
 /**
 * @param args
 */
 public static void main(String[] args) {
 if (args.length < 2) {
 System.err.println("Usage: java DigestCalculator \"Caminho_Arq1\" 
\"Caminho_Arq2\" ... \"Caminho_ArqN\" \"Caminho_ArqListaDigest\"");
 System.exit(1);
 }
 List<String> argList = Arrays.asList(args);
 List<String> files = argList.subList(0, argList.size()-1);
 String digestsFilePath = argList.get(argList.size()-1);
 // check digestfile path
 File file = new File(digestsFilePath);
 if(!file.isFile()) {
 System.err.println("\"Caminho_ArqListaDigest\" is not a valid file path.");
 System.exit(1);
 }
 // check all files path
 int i = 0;
 for(String filePath : files) {
 i++;
 file = new File(filePath);
 if(!file.isFile()) {
 System.err.println(filePath+" (\"Caminho_Arq"+i+"\") is not a valid file 
path.");
 System.exit(1);
 }
 }
 // build the map for verification
 Map<String, Map<String, String>> digestMap = buildMap(digestsFilePath);
 // check all files
 for(String filePath : files) {
 try {
 byte[] fileBytes = getFileBytes(new File(filePath));
 List<String> digestTypes = Arrays.asList("SHA1", "MD5");
 byte[] digest;
 String digestHex;
 String fileName;
 // check both digest types
 for(String digestType : digestTypes ) {
 MessageDigest messageDigest = MessageDigest.getInstance(digestType);
 messageDigest.update(fileBytes);
 digest = messageDigest.digest();
 digestHex = convertToHex(digest);
 fileName = getFileName(filePath);
 // digest check and output
 if(digestMap.containsKey(fileName)) {
 Map<String, String> digestTypeMap = digestMap.get(fileName);
 if(digestTypeMap.containsKey(digestType)) {
 if(digestTypeMap.get(digestType).equals(digestHex)) {
 System.out.println(fileName +" "+ digestType +" "+ 
digestHex +" (OK)");
 } else {
 System.out.println(fileName +" "+ digestType +" "+ 
digestHex +" (NOT OK)");
 }
 } else {
 System.out.println(fileName +" "+ digestType +" "+ digestHex 
+" (NOT FOUND)");
 appendDigestToFileBottom(digestsFilePath, fileName, 
digestType, digestHex);
 }
 } else {
 System.out.println(fileName +" "+ digestType +" "+ digestHex 
+" (NOT FOUND)");
 appendDigestToFileBottom(digestsFilePath, fileName, digestType, 
digestHex);
 }
 }
 } catch (IOException e) {
 e.printStackTrace();
 } catch (NoSuchAlgorithmException e) {
 e.printStackTrace();
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
 }
 private static void appendDigestToFileBottom(String digestsFilePath, String fileName, 
String digestType, String digestHex) {
 try {
 FileWriter fw = new FileWriter(digestsFilePath, true);
 BufferedWriter out = new BufferedWriter(fw);
 out.write(fileName +" "+ digestType +" "+ digestHex +"\n");
 out.close();
 } catch(IOException e) {
 e.printStackTrace();
 }
 }
 private static byte[] getFileBytes(File file) throws IOException {
 // check file
 if (!file.exists()) {
 return null;
 }
 // verify file size
 long length = file.length();
 int maxLength = Integer.MAX_VALUE;
 if (length > maxLength)
 throw new IOException(String.format("The file %s is too large", 
file.getName()));
 int len = (int) length;
 byte[] bytes = new byte[len];
 InputStream in = new FileInputStream(file);
 // read bytes
 int offset = 0, n = 0;
 while (offset < len && n >= 0) {
 n = in.read(bytes, offset, len - offset);
 offset += n;
 }
 if (offset < len)
 throw new IOException("Failed to read the full content from: " + 
file.getName());
 in.close();
 return bytes;
 }
 private static String getFileName(String filePath) {
 String[] fileParts = filePath.split("\\\\");
 String fileName = fileParts[fileParts.length-1];
 return fileName;
 }
 private static String convertToHex(byte[] byteSequence) {
 StringBuffer buffer = new StringBuffer();
 for (int i = 0; i < byteSequence.length; i++) {
 String hex = Integer.toHexString(0x0100 + (byteSequence[i] & 
0x00FF)).substring(1);
 buffer.append((hex.length() < 2 ? "0" : "") + hex);
 }
 return buffer.toString();
 }
 private static Map<String, Map<String, String>> buildMap(String fileName) {
 try {
 BufferedReader in = new BufferedReader(new FileReader(fileName));
 Map<String, Map<String, String>> digestMap = new HashMap<String, 
Map<String,String>>();
 String buffer;
 while ((buffer = in.readLine()) != null) {
 String[] line = buffer.split(" ");
 Map<String, String> digestTypeMap;
 if(digestMap.containsKey(line[0])) {
 digestTypeMap = digestMap.get(line[0]);
 } else {
 digestTypeMap = new HashMap<String, String>();
 }
 digestTypeMap.put(line[1], line[2]);
 digestMap.put(line[0], digestTypeMap);
 }
 in.close();
 return digestMap;
 } catch (IOException e) {
 e.printStackTrace();
 return null;
 }
 }
}

Outros materiais